командной строки 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 /?
Спасибо. Хотя есть некоторые вещи, которые я до сих пор не понимаю. 1. Зачем компилировать CompressionError на последнем этапе командного файла? – christantoan
2. Являются ли ссылки %% D и %% F справочными и файлами? – christantoan
'set" CompressionError = 0 "', который может быть также просто установленным. CompressionError = "" гарантирует, что нет переменной среды 'CompressionError' со значением' 1', определенным случайно за пределами этого командного скрипта, что приводит к остановке пакетной обработки на конец этого командного сценария. '%% D' и' %% F' являются переменными цикла для каталогов. '%% D' для каталогов' Files1' и 'Files2' и' %% F' для подкаталогов с относительным путем к текущему каталогу, например 'Files1 \ files11'. Добавляя во внешний цикл 'echo %% D' и внутренний цикл' echo %% F', вы можете увидеть значения переменных цикла. – Mofi