batch:ampersand导致findstr的问题

Bri*_*top 2 batch-file findstr batch-processing

这部分工作正常,直到文件名中有一个&符号,在这种情况下它会完全崩溃我的脚本.

echo %filename% | findstr /i /b /c:"%name% (%year%)"
Run Code Online (Sandbox Code Playgroud)

我不能只是将文件名放入引号,因为我需要在开头找到字符串.那我怎么能两个都做?

jeb*_*jeb 6

对于命令行使用:

echo %file^name:^&=^^^&% | ...
Run Code Online (Sandbox Code Playgroud)

在批处理文件中

echo %%filename:^&=^^^&%% | ...
Run Code Online (Sandbox Code Playgroud)

这个怎么运作?
当管道创建两个新的cmd.exe实例时,echo ...将解析两次.
诀窍是仅在第二次扩展中扩展文件名.
然后扩展和替换&^&,以避免这些问题&.
插入符将用于逃脱&符号,并且其本身将被移除.
在第二次扩展中,解析器只能看到echo %filename:&=^&%.

要强制扩展到第二个解析步骤,批处理文件的百分号必须加倍.
从命令行,这不起作用,但变量名称中的任何位置都有一个简单的插入符号.

替代方案:

echo "%filename%" | findstr /i /b /c:^"\"%filename% (%year%)\""
Run Code Online (Sandbox Code Playgroud)

这会简单地添加引号并在搜索表达式中使用引号