سؤال

أنا فعلا جديد جدا في هذا الشيء ملف الدفعة. أعلم أنه من المهم معرفة الأوامر الأساسية على الأقل. كيف يمكنني القيام بما يلي؟

  • 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top