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