我在批处理文件脚本中有以下字符串:
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:*==%
- 没有效果。
感谢。
答案 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
这假设您要删除最多包括初始 =