从batch file中的string中删除引号“”

我用:

FOR /F "delims=" %%G IN ("%command%") DO SET command=%%~G 

从variables%command%中删除“”引号。 如果命令= “Shutdown / s / t 00” ,则在该行之后: Shutdown / s / t 00 。 它的工作。 但是,当命令包含等号(=)的string时,它也会删除此字符。 例:
之前,command = “D:\ temp \ stinger –ADL – GO – 静音–ReportPath = D:\ temp –ReportOnly – 删除 – 程序”
之后,command = D:\ temp \ stinger –ADL – GO – 静音–ReportPath D:\ temp –ReportOnly – 删除 – 程序

看,引号“”被删除,而且符号=。

所以,如何删除引号而不删除等号。

谢谢

而不是通过命令循环,你可以使用字符串操作。

 set command=%command:"=% 

command后面的值是"=<nul>所以你可以在变量命令中删除引号,作为一个额外的例子,你也可以使用%command: =_%来用下划线替换命令中的所有空格。

你的命令失败的原因是因为字符串中的引号和IN()子句中的引号相互抵消,所以其余的内容不被引用。 FOR / F解析器将未加引号的=视为一个转换为空格的令牌分隔符。 您也可能遇到有毒字符(如&| 等等

这个问题是通过使用延迟扩展来避免的。 延迟状态在FOR循环之前切换,并在循环内关闭,以便任何! 在命令内保存。

 setlocal enableDelayedExpansion for /f "delims=" %%A in ("!command!") do endlocal & set "command=%%~A" 

这种方法的主要优点是无论命令是否开始引用,您都可以得到正确的结果。