إنشاء ملف دفعي لعمل نسخة احتياطية من مجلد محدد
-
16-09-2019 - |
سؤال
أنا فعلا جديد جدا في هذا الشيء ملف الدفعة. أعلم أنه من المهم معرفة الأوامر الأساسية على الأقل. كيف يمكنني القيام بما يلي؟
- Zipping مجلد محدد.
- حرك المجلد إلى مكان آخر.
- عند الضغط عليه، سيكون اسم ملف ZIP هو التاريخ الحالي وإذا كان هناك ملف مضغوط آخر بنفس الاسم، فيجب باسم 20090924-2.
ملاحظة: 7-zip مثبت على جهاز الكمبيوتر الخاص بي كبرنامج أرشيف.
المحلول
سيقوم البرنامج النصي المدفوع المدرج أدناه بذلك (لقد اختبرته وتعمل على المواصفات). تم تحديد الدليل إلى الرمز البريدي والتحرك كدليل الأصلي واسم الدليل (Parent_Foldertozip و Foldozip في البداية) - لم أستطع معرفة كيفية نسخ الدلائل بأكملها (أعتقد أن xcopy يمكن فقط نسخ محتوى الأدلة والسلع --ادات.). تم تحديد موقع نسخ الموقع كمدخرين، ويتم تحديد الدليل لوضع الملفات المضغوطة كما zipdir.
تم تكوين موقع 7-zip من خلال sevenzip_exe.
ملاحظة أيضا أن الحصول على التاريخ الحالي بالتنسيق المطلوب يعتمد على تنسيق التاريخ القصير في الإعدادات الإقليمية. لقد أدرجت ثلاثة إصدارات مختلفة ل ISO-8601، أوروبا الوسطى والولايات المتحدة الأمريكية النشطة في القائمة في الولايات المتحدة الأمريكية ("SET FDATE ="). إذا كان هناك حاجة إلى واحد مختلف، فما عليك سوى نسخ لصق من أحدهما آخرين.
ومع ذلك، تجدر الإشارة إلى أن هذا النوع من الأشياء أسهل بكثير بات, بيثون أو Powershell..
@echo off
@title=Folder zip and move...
rem Parameters
rem Folder to zip and move
set PARENT_FOLDERTOZIP=T:\to delete
set FOLDERTOZIP=Folder to Compress
rem Target folder for moving the input folder to.
set FOLDERTARGETLOCATION=s:\move Here
rem Where to place compressed folders
set ZIPDIR=D:\toDelete\2009-09-24a
rem Configuration
set SEVENZIP_EXE=D:\Program Files\7-Zip\7z.exe
rem =================== Date ==============================================
rem There is no universal way inside batch itself to get a
rem date that is independent of regional settings (but is
rem quite trivial if an external program or script
rem (Perl/Python) is available).
rem
rem For short date formats:
rem
rem -------------------------------------------------------
rem
rem ISO-8601:
rem 0123456789
rem yyyy-MM-dd/ E.g.: 2009-09-24
rem
rem set FDATE=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
rem
rem -------------------------------------------------------
rem
rem Central european:
rem 0123456789
rem dd/MM/yyyy E.g.: 24/09/2009
rem
rem set FDATE=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
rem
rem -------------------------------------------------------
rem
rem US:
rem
rem 0123456789
rem MM/dd/yyyy E.g.: 09/24/2009
rem
rem set FDATE=%DATE:~6,4%%DATE:~0,2%%DATE:~3,2%
set FDATE=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
set ZIPFILE=%ZIPDIR%\%FDATE%.7z
set FOLDERTOZIP_FULLPATH=%PARENT_FOLDERTOZIP%\%FOLDERTOZIP%
mkdir %FOLDERTARGETLOCATION%
rem Does a zip file already exist?
if exist "%ZIPFILE%" GOTO L_ZIPFILE_EXISTS
GOTO L_ZIPFILENAME_OK
rem Find a compressed file that does not already exist.
:L_ZIPFILE_EXISTS
set RNUM=0
:L_TRYANOTHER
set /a RNUM=%RNUM% + 1
set ZIPFILE=%ZIPDIR%\%FDATE%-%RNUM%.7z
echo Candidate: %ZIPFILE% ...
if exist "%ZIPFILE%" GOTO L_TRYANOTHER
rem Zip the folder!
:L_ZIPFILENAME_OK
"%SEVENZIP_EXE%" a %ZIPFILE% "%FOLDERTOZIP_FULLPATH%"
if exist "%ZIPFILE%" GOTO L_OKZIP
GOTO L_ERROREND
:L_OKZIP
rem Move folder: copy, then delete source.
set DEST_FOLDER=%FOLDERTARGETLOCATION%\%FOLDERTOZIP%
mkdir "%DEST_FOLDER%"
xcopy /Y /S "%FOLDERTOZIP_FULLPATH%"\*.* "%DEST_FOLDER%"\
rmdir /S "%FOLDERTOZIP_FULLPATH%"
GOTO L_END
:L_ERROREND
echo 7-Zipping failed !!!
:L_END
pause