从批处理文件中的字符串中删除引号“”

时间:2014-02-13 21:18:14

标签: windows batch-file

我用:

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

看,报价""被删除,但也符号=。

那么,如何删除引号""没有删除相同的字符。

由于

2 个答案:

答案 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"

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