在cmd窗口中替换子字符串

时间:2016-01-01 15:41:51

标签: string batch-file cmd

我在批处理文件脚本中有以下字符串:

ABCE#$1 TroubleMaker[FFFFF A=MyCountry US=1 CA=1 JP=1 EU=1

当我这样做时,它存储在_var中 set _var=%_var:* A=% - 它会切换" A"之前的所有字符(包括“A”),并留下=MyCountry US=1 CA=1 JP=1 EU=1

如何更改set命令以剪切字符串中的=标记?

尝试set _var=%_var:*==% - 没有效果。

感谢。

2 个答案:

答案 0 :(得分:1)

=扰乱子字符串替换语法,因为它自己包含=

您可以进行以下解决方法:

set _var=%_var:* A=%
set _var=%_var:~1%

第二行构成子字符串扩展语法(详情请输入set /?),它将第一个字符分开,应该是=

这当然只有=紧跟A子字符串后才有效。

您可以在删除之前检查第一个字符是=,例如:

set _var=%_var:* A=%
if "%_var:~,1%"=="=" set _var=%_var:~1%

如果您只想搜索(第一个)=字符并忽略A子字符串,则可以建立如下的循环结构:

:LOOP
if "%_var%"=="" goto :END
if "%_var:~,1%"=="=" (
    set _var=%_var:~1%
    goto :END
) else (
    set _var=%_var:~1%
    goto :LOOP
)
:END

这会切断第一个字符并检查它是否为=。如果是,则将剩余的字符串存储在_var中并保留循环;如果没有,循环继续检查下一个字符。如果字符串不包含=字符,则插入第一行不挂起。

答案 1 :(得分:1)

@ECHO OFF
SETLOCAL
SET "string=ABCE#$1 TroubleMaker[FFFFF A=MyCountry US=1 CA=1 JP=1 EU=1"

FOR /f "tokens=1*delims==" %%s IN ("%string%") DO SET "string=%%t"
ECHO "%string%"
GOTO :EOF

这假设您要删除最多包括初始 =