Как заархивировать каждую папку в каталоге отдельно с помощью WinRAR?

Я пытаюсь использовать 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 строки в пакетном файле, чтобы получить нужные архивы?


person Jessie    schedule 02.06.2010    source источник


Ответы (2)


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

  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" 
)
person aphoria    schedule 02.06.2010
comment
привет, спасибо за ваш ответ, я попробовал это FOR /F DELIMS== %%D в ('DIR C:\projects /AD /B') DO ( C:\Program Files\WinRAR\WinRAR.EXE m -r C: \Backup\%%D.rar %%D ), но это не сработало. - person Jessie; 03.06.2010
comment
Хммм... Ты получаешь какие-нибудь сообщения? - person aphoria; 03.06.2010
comment
нет просто запускается, выходит черный экран, но файлы остаются в c:\projects и ничего в c:\backup :( - person Jessie; 03.06.2010
comment
на всякий случай это папки. c:\projects\test\ c:\projects\country\ c:\projects\db\ - person Jessie; 03.06.2010
comment
Вы запускаете его из проводника? Откройте командную строку и запустите ее оттуда, чтобы окно оставалось открытым после завершения скрипта. - person aphoria; 03.06.2010
comment
ты имеешь в виду заходи в пуск, запускай, cmd, потом на черном экране вставляешь эту команду и нажимаешь энтер? я получаю %%D был неожиданным в это время - person Jessie; 03.06.2010
comment
Сохраните его в файл, например MyScript.CMD, а затем откройте CMD и запустите MyScript.CMD. - person aphoria; 04.06.2010
comment
я запускаю так, появляется черный экран на секунду и закрывается. Файлы все те же. - person Jessie; 04.06.2010
comment
Если вы откроете командную строку, а затем запустите файл .CMD, окно командной строки не должно исчезнуть, если в вашем сценарии нет команды EXIT. У вас больше кода в файле .CMD, чем код выше? - person aphoria; 04.06.2010
comment
вот что я получаю: C:\Documents and Settings\JJessie›c:\scripts\MyScript.CMD C:\Documents and Settings\JJessie›FOR /F DELIMS== %D in ('DIR C:\projects/AD /B') DO (C:\Program Files\WinRAR\WinRAR.EXE m -r C:\backup\%D.rar %D ) C:\Documents and Settings\JJessie›(C:\Program Files\WinRAR\ WinRAR.EXE m -r C: \backup\country.rar страна ) C:\Documents and Settings\JJessie›(C:\Program Files\WinRAR\WinRAR.EXE m -r C: \backup\db.rar db ) C:\Documents and Settings\JJessie›(C:\Program Files\WinRAR\WinRAR.EXE m -r C:\backup\test.rar test ) - person Jessie; 04.06.2010
comment
C:\Documents and Settings\JJessie›, но ничего не делает с файлами, которые они остаются в c:\projects, а папка C:\backup пуста - person Jessie; 04.06.2010
comment
Что, если вы CD \Projects перед запуском файла .CMD? - person aphoria; 04.06.2010
comment
да!! большое спасибо, я действительно ценю это! я пробовал все. :) - person Jessie; 05.06.2010
comment
Я рад, что мы это поняли. Если вы считаете, что мой ответ помог, не могли бы вы принять его, нажав на галочку? Спасибо! - person aphoria; 05.06.2010
comment
Обратите внимание, что реальный ответ заключается в том, что, поскольку в OP указан конкретно winrar, вам даже не нужен командный файл или сценарий, чтобы сделать это, winrar может сделать это в графическом интерфейсе, изначально помещая каждый подкаталог в свой отдельный rar. - person Collin Chaffin; 01.08.2019

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

@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 в папке Program Files 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\ на Имя архива и включение параметра Помещать каждый файл в отдельный архив на вкладке Файлы. Другие параметры, используемые в пакетном файле выше, определенные с помощью переключателей, можно найти на вкладках Общие, Резервное копирование и Время.

person Mofi    schedule 24.04.2016