Пакетный скрипт исключает foldername для WinRar
Я хочу, чтобы скрипт пропускал все подпапки в основной папке, содержащей _Fun_
в имени папки, чтобы избежать, что WinRar архивировать его.
Я попробовал что-то, но ничего не получилось, последняя попытка, которую я сделал, выглядит так
for /D %%F in ("C:\Users\Admin\Desktop\Pictures\*") do (
"%ProgramFiles%\WinRAR\Rar.exe" m -ep1 -mt5 -m1 -v103M -r -x@"_Fun_" "C:\Users\Admin\Desktop\ArchivePictures\-Archive-Name-" "%%~F"
goto Done
)
1 ответ
Используйте этот пакетный код, чтобы проверить, содержит ли имя текущей папки _Fun_
и пропустить эту папку.
setlocal EnableDelayedExpansion
for /D %%F in ("C:\Users\Admin\Desktop\Pictures\*") do (
set "FolderName=%%~nxF"
if "!FolderName:_Fun_=!" == "%%~nxF" (
"%ProgramFiles%\WinRAR\Rar.exe" m -ep1 -mt5 -m1 -v103M -r "C:\Users\Admin\Desktop\ArchivePictures\-Archive-Name-" "%%~F"
goto Done
)
)
:Done
endlocal
Имя папки и расширение (если папка где-то содержит точку) без пути присваивается переменной окружения FolderName
,
В следующей строке все вхождения _Fun_
в переменной среды FolderName
расширен задерживается и не уже когда cmd.exe
анализирует весь блок FOR, заменяется ничем, и эта строка сравнивается с неизмененным именем папки.
Сравнение строк является положительным, если имя папки не содержит _Fun_
в любом месте. В этом случае папка сжимается с помощью WinRAR.
Узнайте больше о манипуляциях со строками и отложенном расширении переменных среды, открыв окно командной строки и введя set /?
или же help set
, нажав клавишу RETURN и прочитав справочные страницы, выведенные в окне консоли.
Последовательности специальных символов, используемые здесь для %%~nxF
объясняются с помощью команды call
а также команда for /?
который можно прочитать, выполнив call /?
или же for /?
или же help call
или же help for
,