String 在cmd窗口中替换子字符串
批处理文件脚本中有以下字符串:String 在cmd窗口中替换子字符串,string,batch-file,cmd,String,Batch File,Cmd,批处理文件脚本中有以下字符串: ABCE#$1 TroubleMaker[FFFFF A=MyCountry US=1 CA=1 JP=1 EU=1 当我这样做时,它存储在_var中 set\u var=%\u var:*A=%-它会剪切“A”(包括“A”)之前的所有字符,剩下的是=MyCountry US=1 CA=1 JP=1 EU=1 如何更改set命令以同时从字符串中剪切=标记 已尝试设置_var=%\u var:==%-无效 谢谢。由于子字符串替换语法本身包含一个=,因此=会干扰子字
ABCE#$1 TroubleMaker[FFFFF A=MyCountry US=1 CA=1 JP=1 EU=1
当我这样做时,它存储在_var中
set\u var=%\u var:*A=%
-它会剪切“A”
(包括“A”)之前的所有字符,剩下的是=MyCountry US=1 CA=1 JP=1 EU=1
如何更改set
命令以同时从字符串中剪切=
标记
已尝试设置_var=%\u var:==%
-无效
谢谢。由于子字符串替换语法本身包含一个
=
,因此=
会干扰子字符串替换语法
您可以进行以下工作:
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
这将切断第一个字符并检查它是否为=
。如果是,剩余的字符串存储在\u var
中,循环保留;否则,循环将继续检查下一个字符。如果字符串不包含=
字符,则插入第一行以不挂起。@ECHO OFF
SETLOCAL
设置“string=ABCE#$1麻烦制造者[FFFFF A=MyCountry US=1 CA=1 JP=1 EU=1”
对于/f“tokens=1*delims==”(“%string%”)中的%%s,请设置“string=%%t”
回显“%string%”
后藤:EOF
这假设您要删除最多包含首字母=的字符串,谢谢。我的问题是“A”子字符串并不总是存在,它大约90%的时间都在那里,但不是100%…而“=”子字符串100%将在那里。我已经按照您的建议做了(保留“=”并使用~1将其删除-但寻找一种在100%的时间内都能工作的更好方法)@aschipflYou's welcome!再看一看;它不使用子字符串扩展,但对/F使用
,而且它的性能肯定比我的goto
循环结构好…你的答案对我来说运行得很好,它对运行时间问题不是专家,但如果我在一台较弱的计算机上运行此解决方案,将Magoo answer执行赌注ter?@aschipflIn general,是的;您会注意到在循环中多次运行代码的情况下的区别,例如,多次迭代;实际上我会使用Magoo的方法;在我的回答中,我只是想演示如何使用子字符串语法,因为您实际上是在问这个问题……只是一个旁注:以防万一字符串是abc==def
,我的方法仅删除第一个=
,并返回=def
,但Magoo的方法返回def
。。。