Windows 删除引号“&引用;从批处理文件中的字符串

Windows 删除引号“&引用;从批处理文件中的字符串,windows,batch-file,Windows,Batch File,我使用: 要从变量%command%中删除“”引号,请执行以下操作。如果command=“Shutdown/s/t 00”,则该行后面将是:Shutdown/s/t 00。它是有效的。 但当命令包含等号(=)的字符串时,它也会删除此字符。示例: 在此之前,command=“D:\temp\stinger--ADL--GO--Silent--ReportPath=D:\temp--ReportOnly--Delete--Program” 之后,command=D:\temp\stinger--AD

我使用:

要从变量%command%中删除“”引号,请执行以下操作。如果command=“Shutdown/s/t 00”,则该行后面将是:Shutdown/s/t 00。它是有效的。 但当命令包含等号(=)的字符串时,它也会删除此字符。示例:
在此之前,command=“D:\temp\stinger--ADL--GO--Silent--ReportPath=D:\temp--ReportOnly--Delete--Program”
之后,command=D:\temp\stinger--ADL--GO--Silent--ReportPath D:\temp--ReportOnly--Delete--Program

看,引号“”被删除了,但符号=

那么,如何在不删除相等字符的情况下删除引号“”


感谢您使用字符串操作,而不是通过命令执行for循环

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

command
之后的值是
“=
,因此您在变量命令中去掉了引号。作为一个额外的例子,您还可以执行
%command:=\u%
以下划线替换命令中的所有空格。

命令失败的原因是字符串中的引号和in()中的引号子句相互取消,因此内容的其余部分不带引号。FOR/F解析器将未带引号的
=
视为转换为空格的标记分隔符。您还可能遇到有毒字符的问题,如
&
|

使用延迟扩展可以避免此问题。延迟状态在FOR循环之前切换为on,在循环中切换为off,以便保留命令中的任何

set command=%command:"=%

此方法的主要优点是,无论命令是否以引号开头,您都可以得到正确的结果。

+1用于字符串操作。建议:
如果已定义命令,请设置“command=%command:”=%“
在使用字符串操作之前,您要检查该命令是否已定义,因为,如果命令不存在,则操作将失败,
set
将使命令字面上等于
%command:=%
@Phiber如果您感兴趣,请查看有关字符串操作的页面。
“set command=%command:=%”
当然,如果您知道命令被引用,这将起作用。但如果有时引用命令,有时不引用该命令,该怎么办?您可以添加带有子字符串的IF测试,以有条件地删除第一个和最后一个字符。但是有更好的办法。请参阅@foxidrive-删除所有引号可能是不可接受的。也许命令中有一些参数应该保持引用。答案可能是重复的。我想知道为什么这样做不起作用。需要“设置本地enabledelayedexpansion”
setlocal enableDelayedExpansion
for /f "delims=" %%A in ("!command!") do endlocal & set "command=%%~A"