Пакетный скрипт исключает 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,

Другие вопросы по тегам