For 循环,其中 for 变量包含括号

For 循环,其中 for 变量包含括号

我有许多文件包含需要删除的行。这些文件包含在特定目录的子目录中,需要遍历特定扩展名的所有文件并删除该行。我遇到的问题是路径中有括号和空格,这似乎会阻止循环正常工作。如何转义路径?

我目前拥有的代码:

For /R "%ALL_BUT_FIRST%\bin\%1\Scripts" %%G in (*.csx) do (
echo %%G 
findstr /V "texttoreplace" "%%G" >"%%G"
)

当不尝试写入文件时,findstr 会完美地将正确的结果输出到控制台。只有写入文件才导致 .bat 失败并出现错误:

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(5185,5): 错误 MSB3073: 命令“”D:\Users[用户名]\Desktop\Other projects (ie open source those)\Freee\FrEee.WinForms\post-build.bat“调试 D:\Users[用户名]\Desktop\Other projects (ie open source those)\Freee\FrEee.WinForms\”以代码 1 退出。

答案1

在 for 循环中使用 %%~fG 来扩展为完全合格的路径。

CD "%ALL_BUT_FIRST%\bin\%1\Scripts"
For /R %%G in ("*.csx") do (
echo %%~fG 
findstr /V "texttoreplace" "%%~fG" >"%%~fG"
)

答案2

因此,经过几天的努力,以及 T3RR0R 在他的回答中的评论,我找到了解决问题的方法。结果发现问题不是文件路径,而是无法覆盖文件。

解决方案是:

CD "%ALL_BUT_FIRST%\bin\%1\Scripts"
For /R %%G in ("*.csx") do (
echo %%~fG.temp
echo %%G
ren "%%~fG" "%%~nxG.temp"
findstr /V "texttoreplace" "%%G.temp" > "%%~fG"
del "%%G.temp"
)

相关内容