我用:
FOR /F "delims=" %%G IN ("%command%") DO SET command=%%~G
删除""来自变量%命令%的引号。如果command = " Shutdown / s / t 00" ,此行之后将是: Shutdown / s / t 00 。它的工作原理。
但是当命令包含一个等号(=)的字符串时,它也会删除这个字符。例如:
之前,命令= " D:\ temp \ stinger --ADL --GO --Silent --ReportPath = D:\ temp --ReportOnly - 删除 - 程序"
之后,command = D:\ temp \ stinger --ADL --GO --Silent --ReportPath D:\ temp --ReportOnly --Delete --Program
看,报价""被删除,但也符号=。
那么,如何删除引号""没有删除相同的字符。
由于
答案 0 :(得分:30)
而不是通过命令的for循环,你可以只使用字符串操作。
set command=%command:"=%
command
之后的值为"=<nul>
,因此您在变量命令中删除了引号。作为一个额外的例子,你也可以%command: =_%
用下划线替换命令中的所有空格。
答案 1 :(得分:8)
您的命令失败的原因是因为字符串中的引号和IN()子句中的引号相互抵消,因此未引用内容的其余部分。 FOR / F解析器将不带引号的=
视为转换为空格的标记分隔符。你也会遇到像&
,|
等毒药字符的问题。
使用延迟扩展可以避免这个问题。延迟状态在FOR循环之前切换,在循环内关闭,以便保留命令中的任何!
。
setlocal enableDelayedExpansion
for /f "delims=" %%A in ("!command!") do endlocal & set "command=%%~A"
这种方法的主要优点是无论命令是否从引用开始,您都能得到正确的结果。