Как заархивировать каждую папку в каталоге отдельно, используя WinRAR? - PullRequest
2 голосов
/ 02 июня 2010

Я пытаюсь использовать WinRAR для сжатия всех моих папок по отдельности.

Пример содержимого папки до

c:\projects\test
c:\projects\country
c:\projects\db

и после запуска командного файла

c:\backup\test.rar
c:\backup\country.rar
c:\backup\db.rar

Я пытаюсь выполнить следующую команду в командном файле. Но он сжимает все папки в папке проектов, находящихся в резервном архиве:

for /f "delims==" %%D in ('DIR C:\projects /A /B /S') do (
    "C:\Program Files\WinRAR\WinRAR.EXE" m -r "c:\backup\projects.rar" "%%D"
)

c:\backup\projects.rar содержит все нужные файлы в отдельных архивах.

Как изменить 3 строки в пакетном файле, чтобы получить нужные архивы?

Ответы [ 2 ]

1 голос
/ 02 июня 2010

Я думаю, вам нужно изменить пару вещей.

  1. Измените /A на /AD, чтобы получить только каталоги.
  2. Удалите /S, чтобы вы получили только каталоги верхнего уровня в C:\Projects.
  3. Внутри вашего FOR цикла измените "c:\backup\projects.rar" на C:\Backup\%%D.rar"

ВНИМАНИЕ: этот код не проверен.

FOR /F "DELIMS==" %%D in ('DIR C:\projects /AD /B') DO ( 
  "C:\Program Files\WinRAR\WinRAR.EXE" m -r "C:\Backup\%%D.rar" "%%D" 
)
0 голосов
/ 24 апреля 2016

Вот пакетный файл для более общего использования этой общей задачи, поскольку папка с подпапками для архивирования может быть указана в качестве первого параметра при запуске пакетного файла.

@echo off
setlocal
set "BackupFolder=C:\Backup"

rem Folder to archive can be optionally specified as parameter.
if "%~1" == "" (
    set "FolderToArchive=C:\projects"
) else (
    set "FolderToArchive=%~1"
)

rem Check existence of the folder to archive.
if not exist "%FolderToArchive%\*" (
    echo.
    echo Error: Folder %FolderToArchive% does not exist.
    echo.
    endlocal
    pause
    goto :EOF
)

rem Check existence of backup folder and create this folder
rem if not already existing with verification on success.
if not exist "%BackupFolder%\*" (
    md "%BackupFolder%"
    if errorlevel 1 (
        echo.
        echo Error: Folder %BackupFolder% could not be created.
        echo.
        endlocal
        pause
        goto :EOF
    )
)

rem Archive each subfolder in specified or default folder to archive
rem as separate archive with name of folder as archive file name and
rem with current date and an automatically incremented number with at
rem least 2 digits appended to the archive file name to be able to
rem create multiple archives on different days and even on same day.

rem Parent directory path of each subfolder is removed from archive.
rem The name of the subfolder itself is added to each archive. This
rem can be changed by replacing "%%D" with "%%D\" or "%%D\*". Then
rem the files and subfolders of the compressed folder would be added
rem to archive without the name of the compfessed folder.

rem Best compression is used on creating a solid archive with 4 MB
rem dictionary size. All messages are suppressed except error messages.
rem The last modification time of the created archive file is set to
rem date and time of newest file inside the archive.

set "RarError=0"

for /D %%D in ("%FolderToArchive%\*") do (
    echo Archiving %%D ...
    "%ProgramFiles%\WinRAR\Rar.exe" a -ag_YYYY-MM-DD_NN -cfg- -ep1 -idq -m5 -md4m -r -s -tl -y "%BackupFolder%\%%~nD.rar" "%%D"
    if errorlevel 1 set "RarError=1"
)

rem Wait for a key press if an error occurred on creating an archive file.
if "%RarError%" == "1" (
    echo.
    pause
)
endlocal

Подробнее об используемых переключателях Rar в командной строке откройте текстовый файл Rar.txt в папке с программными файлами WinRAR , который является руководством для консольной версии Rar.exe, и прочитайте объяснения для этих переключателей.

Примечание: Команда a (добавить в архив) используется в приведенном выше коде пакета вместо m (перейти в архив).

Руководство по использованию WinRAR.exe из командного файла можно найти в справке WinRAR на вкладке Содержание в элементе Режим командной строки .

Существуют некоторые различия в списке переключателей между консольной и графической версиями WinRAR . Например, WinRAR.exe поддерживает также создание ZIP-архивов, которые Rar.exe не поддерживает. Поэтому WinRAR.exe поддерживает переключатель -af<type>, который не поддерживается консольной версией. Или переключатель -idq (тихий режим) консольной версии является переключателем -ibck (работает в фоновом режиме) для версии с графическим интерфейсом.

Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните там следующие команды и полностью прочитайте все страницы справки, отображаемые для каждой команды.

  • echo /?
  • endlocal /?
  • for /?
  • if /?
  • md /?
  • pause /?
  • rem /?
  • set /?
  • setlocal /?

Примечание. Такое архивирование также можно выполнить с помощью WinRAR , выбрав в WinRAR папки для архивирования, щелкнув значок Добавить на панели инструментов и вставив C:\Backup\ on Имя архива и опция включения Поместить каждый файл в отдельный архив на вкладке Файлы . Другие параметры, используемые в пакетном файле, указанном выше с помощью переключателей, можно найти на вкладках Общие , Резервное копирование и Время .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...