使用批处理用感叹号和符号替换文件名中的字符串

Replacing strings in filenames with exclamation marks and ampersand using batch

我正在尝试使用批处理脚本替换文件名中的字符串,但是 运行 如果文件中有感叹号或符号,则会出现问题。

Setlocal enabledelayedexpansion
Set "Pattern=[String_A]"
Set "Replace=[B_String]"
For %%a in (*.*) Do (
    Set "File=%%~a"
    Ren "%%a" "!File:%Pattern%=%Replace%!"
)

上面的代码适用于没有文件名的文件名,但我需要其他帮助。

这是我必须 运行 多次的东西(它是更大脚本的一部分)。

感谢任何帮助。

问题是 set "file=%%~a 中的扩展只有在禁用延迟扩展的情况下才是安全的。
解决方案是切换延迟扩展模式。

Setlocal DisableDelayedExpansion
Set "Pattern=[String_A]"
Set "Replace=[B_String]"
For %%a in (*.*) Do (
    Set "File=%%~a"
    Setlocal EnableDelayedExpansion
    Ren "!file!" "!File:%Pattern%=%Replace%!"
    endlocal
)