批处理脚本排除 winrar 的文件夹名称

Batch script exclude foldername for 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
)

使用此批处理代码测试当前文件夹的名称是否包含 _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

在下一行中,环境变量 FolderName 中所有出现的 _Fun_ 扩展延迟并且当 cmd.exe 解析整个 FOR 块时尚未扩展什么都没有替换,并将此字符串与未修改的文件夹名称进行比较。

如果文件夹名称在任何地方都不包含 _Fun_,则字符串比较为正。在这种情况下,文件夹是用 WinRAR.

压缩的

通过打开命令提示符 window,输入 set /?help set,使用键 [=44 执行,了解有关字符串操作和延迟环境变量扩展的更多信息=] 并阅读控制台 window.

中输出的帮助页面

此处用于 %%~nxF 的特殊字符序列在命令 call 和命令 for /? 的帮助中进行了解释,可以通过执行 call /?for /?help callhelp for.