String 如何在特定单词后剪切字符串?
当字符串String 如何在特定单词后剪切字符串?,string,batch-file,delimiter,cut,String,Batch File,Delimiter,Cut,当字符串,TARO/出现时,如何在.bat文件中剪切这样的字符串 Init., 12, TARO/ BLA BLA CDE Ademanto, TARO/ BLA BLA XYZ 我只想要Init.,12和Ademanto之后 我不能在中使用分隔符,因为它仅限于一个字符,对吗?set可以从开头剪切到定义的字符串,但不能从定义的字符串剪切到结尾。使用小技巧有助于: setlocal enabledelayedexpansion set "string=Init., 12, TARO/ BLA B
,TARO/
出现时,如何在.bat文件中剪切这样的字符串
Init., 12, TARO/ BLA BLA CDE
Ademanto, TARO/ BLA BLA XYZ
我只想要Init.,12
和Ademanto
之后
我不能在中使用分隔符,因为它仅限于一个字符,对吗?
set
可以从开头剪切到定义的字符串,但不能从定义的字符串剪切到结尾。使用小技巧有助于:
setlocal enabledelayedexpansion
set "string=Init., 12, TARO/ BLA BLA CDE"
set "str=%string:*TARO/=TARO/%"
echo "!string:%str%=!"
(将包含分隔符字符串(*TARO/
)的字符串开头替换为仅限分隔符字符串(TARO/
)。在第二步中,删除找到的字符串)
另一种方法是用单个字符分隔符(任何确定不在字符串中的字符)替换分隔符字符串。(下面的奇怪符号(þ
)是chr(127)
,但您也可以使用@
、或任何其他不在字符串中的字符)
还有一种方法。用&rem;
替换,芋头/
@echo关闭
setlocal
设置“str=Init.,12,TARO/BLA-BLA-CDE”
set str=%str:,TARO/=&rem;%
回显%str%
这是因为变量是在计算set
命令之前展开的
set str=Init.,12&rem;诸如此类
…作为set var=value&rem的复合命令(忽略行的其余部分)
您还可以echo%str:,TARO/=&rem;%
并实现相同的效果。这里有一个更健壮的解决方案,即使字符串包含引号或有毒字符,也应该可以工作-用新行字符替换截止字符串。FOR/F将迭代每个结果行,因此使用GOTO中断循环并仅保留结果行第一行
@echo off
setlocal disableDelayedExpansion
set "string=;Init., 12, TARO/ BLA BLA CDE"
setlocal enableDelayedExpansion
set ^"string=!string:, TARO/=^
!^"
for /f delims^=^ eol^= %%A in ("!string!") do (
endlocal
set "string=%%A"
goto :break
)
:break
set string
只要字符串在截止字符串之前不包含引号或有毒字符,就应该可以正常工作,这对于示例文本来说肯定是正确的。太花哨了。我不明白这一点。对不起。好吧,我明白了。你的解决方案好得多。你能不能调整它,让我检查几个字符串,比如,TARO
,,TARI
和,TARU
?只要在echo
命令行中将string1
替换为string
(我猜这只是一个打字错误),如果没有像“
或=
,如果它不是以*
或~
开头。。。
@echo off
setlocal disableDelayedExpansion
set "string=;Init., 12, TARO/ BLA BLA CDE"
setlocal enableDelayedExpansion
set ^"string=!string:, TARO/=^
!^"
for /f delims^=^ eol^= %%A in ("!string!") do (
endlocal
set "string=%%A"
goto :break
)
:break
set string