2016-01-13 3 views
1

Я пытаюсь сжать мои подкаталоги со структурой, как этотСжать подкаталоги

Files1\files11\...(files) 
Files1\files12\...(files) 
Files2\files21\...(files) 
Files2\files22\...(files) 

Я хочу, чтобы сжать его, чтобы быть как

Files1\files11.rar 
Files1\files12.rar 
Files2\files21.rar 
Files2\files22.rar 

без удаления оригинальных папок.

Я попробовал этот сценарий

for /d %%d in (*\*) do ("C:\Program Files\WinRAR\Rar.exe" a -m5 -s "%%d.rar" "%%d") 

, но он работает только на одном уровне. Я также пробовал Batch file to compress subdirectories, но по какой-то причине он не работает. Он выбрасывает файл не найденной ошибкой.

Благодаря

ответ

0

командной строки Windows, не поддерживает подстановочные знаки для папки в пути файла/папки. *\* поэтому недействителен.

Два вложенных ДЛЯ петли необходимы с внешним контуром работает в текущей директории обработки каталогов Files1 и Files2 и с внутренним контуром обработки каталогов files11, files12, files21, files22 и работающие Рар на этих подкаталогов.

Первая партия код создает архивные файлы

Files1\files11.rar 
Files1\files12.rar 
Files2\files21.rar 
Files2\files22.rar 

с заархивированным каталогом files11, files12, files21, files22 включены в каждом архиве.

@echo off 
set "CompressionError=0" 

rem Set directory of batch file as working directory. 
pushd "%~dp0" 

rem For each directory in working directory run a second loop which 
rem compresses each subdirectory of current directory to a RAR archive 
rem with deleting all files and subdirectories as well as the archived 
rem directory itself and name the archive file like the archived directory. 

for /D %%D in (*) do (
    for /D %%F in ("%%D\*") do (
     "%ProgramFiles%\WinRAR\Rar.exe" a -cfg- -df -ep1 -idq -m5 -md4m -r -s -y "%%F.rar" "%%F" 
     if errorlevel 1 set "CompressionError=1" 
    ) 
) 

rem Restore the previous working directory. 
popd 

rem Halt batch processing if any error occurred on any compression. 
if "%CompressionError%" == "1" pause 
set "CompressionError=" 

Вторая партия код создает также архив 4 файлов, но с заархивированным каталогом files11, files12, files21, files22 не добавляется в архив.

@echo off 
set "CompressionError=0" 

rem Set directory of batch file as working directory. 
pushd "%~dp0" 

rem For each directory in working directory run a second loop which 
rem compresses each subdirectory of current directory to a RAR archive 
rem with deleting all files and subdirectories as well as the archived 
rem directory itself and name the archive file like the archived directory. 

for /D %%D in (*) do (
    for /D %%F in ("%%D\*") do (
     "%ProgramFiles%\WinRAR\Rar.exe" a -cfg- -df -ep1 -idq -m5 -md4m -r -s -y "%%F.rar" "%%F\" 
     if errorlevel 1 (
      set "CompressionError=1" 
     ) else (
      rd "%%F" 
     ) 
    ) 
) 

rem Restore the previous working directory. 
popd 

rem Halt batch processing if any error occurred on any compression. 
if "%CompressionError%" == "1" pause 
set "CompressionError=" 

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

Оба командных файла ничего не показывают во время выполнения и автоматически выходят, если ошибка не возникает. Но пакетная обработка останавливается в конце, если возникла какая-либо ошибка сжатия, так что пользователь партии может просматривать сообщения об ошибках, выводимые Rar в окно консоли.

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

  • call /? объясняет %~dp0 (диск и путь аргумента 0 - пакетный файл)
  • echo /?
  • for /?
  • if /?
  • pause /?
  • popd /?
  • pushd /?
  • rd /?
  • rem /?
  • set /?
+0

Спасибо. Хотя есть некоторые вещи, которые я до сих пор не понимаю. 1. Зачем компилировать CompressionError на последнем этапе командного файла? – christantoan

+0

2. Являются ли ссылки %% D и %% F справочными и файлами? – christantoan

+0

'set" CompressionError = 0 "', который может быть также просто установленным. CompressionError = "" гарантирует, что нет переменной среды 'CompressionError' со значением' 1', определенным случайно за пределами этого командного скрипта, что приводит к остановке пакетной обработки на конец этого командного сценария. '%% D' и' %% F' являются переменными цикла для каталогов. '%% D' для каталогов' Files1' и 'Files2' и' %% F' для подкаталогов с относительным путем к текущему каталогу, например 'Files1 \ files11'. Добавляя во внешний цикл 'echo %% D' и внутренний цикл' echo %% F', вы можете увидеть значения переменных цикла. – Mofi

Смежные вопросы