Эту задачу можно выполнить с помощью командного файла со следующей единственной командной строкой:
@for /F "eol=| delims=" %%I in ('dir "%~dp0*.rar" /A-D /B 2^>nul') do @"%ProgramFiles%\WinRAR\Rar.exe" d -idcd "%~dp0%%I" "patata.pat" "*\patata.pat"
Эта командная строка работает даже на дисках FAT16, FAT32 и exFAT, не обрабатывая файл * .rar более одного раза. .
Можно также использовать следующую командную строку в командном файле при выполнении на разделе NTFS.
@for %%I in ("%~dp0*.rar") do @"%ProgramFiles%\WinRAR\Rar.exe" d -idcd "%%I" "patata.pat" "*\patata.pat"
Эта командная строка обрабатывает все файлы * .rar в каталоге пакетный файл не работает корректно на дисках FAT16, FAT32 и exFAT из-за списка записей каталога и порядка изменений записей каталога * .rar при каждом выполнении Rar.exe
в случае изменения файла RAR из-за удаления patata.pat
из root архива или любого каталога внутри архива или всего файла RAR, если он не содержит ничего, кроме patata.pat
. Таким образом, файлы RAR обрабатываются более одного раза, и некоторые файлы RAR могут быть по ошибке пропущены при использовании этой командной строки на дисках с файловой системой FAT16, FAT32 или exFAT.
Разница в том, что первая командная строка приводит к выполнению FOR в фоновом режиме с %ComSpec% /c
с командной строкой DIR , добавленной в качестве дополнительных аргументов еще одним командным процессом, который выполняет команду DIR для вывода всех имен файлов RAR просто имя файла и расширение файла до STDOUT фонового командного процесса. Этот вывод захватывается FOR и следующей обработкой построчно. Таким образом, изменения в списке записей каталога, вызванные Rar.exe
, не имеют значения, поскольку список имен файлов в памяти обрабатывается FOR вместо списка записей каталога, изменяющегося во время итераций l oop. .
Хитрость заключается в том, чтобы один раз указать patata.pat
без пути для удаления этого файла в root файла RAR и еще раз с помощью *\patata.pat
, чтобы удалить его из файла RAR с любым путем, сохраненным в RAR-файл. *\
для любого пути есть нечто особенное, объясненное в Rar.txt
, которое является руководством WinRAR консольная версия Rar.exe
.
Команда RAR d
для удаления каталога или файла из файла RAR и переключателя -idcd
для подавления авторских прав, а сообщения Done
документируются также в текстовом файле Rar.txt
.
Путь к каталогу пакетного файла, на который ссылается %~dp0
, всегда расширяется до строка, заканчивающаяся \
. По этой причине %~dp0
никогда не следует объединять с дополнительным обратным символом sh с именем папки или файла, так как это приводит к окончательному выполнению двух последовательных обратных слэшей, и ядро Windows должно удалить дополнительный обратный слэш sh перед передачей. полное имя файла / папки для файловой системы.