我想在.bat脚本中编辑一个字符串以替换其中的所有“&”字符。该字符串将用作ffmpeg命令路径的一部分。
这是我尝试过的简化版本:
1 /
set string=aaa&bbb&ccc
set "string=%string:&=_%"
echo %string%
这给:
C:\Users\Administrator\Desktop>set string=aaa & bbb & ccc
'bbb' is not recognized as an internal or external command,
operable program or batch file.
'ccc' is not recognized as an internal or external command,
operable program or batch file.
2 /
set string="aaa&bbb&ccc"
set "string=%string:&=_%"
echo %string%
这会给出正确的结果,但带有“,这会在以后使用ffmpeg命令引起问题:
"aaa_bbb_ccc"
我基本上想获得第二个结果,但不包含“。
我不想使用PowerShell。定制库很好。任何建议将不胜感激。
(编辑以获取更多详细信息)
答案 0 :(得分:1)
您的问题是变量的处理。
第一个问题是您set string=aaa&bbb&ccc
。
这是行不通的,因为&
将作为命令分隔符处理。
echo %string%
,则 &
失败。
如果使用批处理扩展变量,则内容仍将解析为特殊字符。
要解决这些问题,可以使用扩展的SET语法。
并延迟了扩展访问内容的速度
setlocal EnableDelayedExpansion
set "string=aaa&bbb&ccc"
echo Before: !string!
set "string=!string:&=_!"
echo After: !string!