Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 在cmd窗口中替换子字符串_String_Batch File_Cmd - Fatal编程技术网

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
。。。