如果出现字符串, TARO/
,如何在我的.bat文件中剪切这些字符串?
Init., 12, TARO/ BLA BLA CDE
Ademanto, TARO/ BLA BLA XYZ
我之后只想Init., 12
和Ademanto
。
我不能在FOR中使用分隔符,因为它仅限于一个单独的字符,对吗?
答案 0 :(得分:6)
set
能够从开头剪切到定义的字符串,但不能从定义的字符串剪切到结尾。使用一个小技巧有助于:
setlocal enabledelayedexpansion
set "string=Init., 12, TARO/ BLA BLA CDE"
set "str=%string:*TARO/=TARO/%"
echo "!string:%str%=!"
(将包含delimiter-string(*TARO/
)的字符串的开头替换为仅限分隔符字符串(TARO/
)。在第二步中,删除找到的字符串)
另一种方法是用单个char分隔符替换delimiter-string(任何确定不在字符串中的char。(下面的奇怪符号(þ
)是chr(127)
,但你也可以使用@
,#
或任何其他不在你的字符串中的字符)
for /f "delims=þ" %%i in ("%string:TARO/=þ%") do echo %%i
答案 1 :(得分:6)
还有另外一种方式。将, TARO/
替换为&rem;
。
@echo off
setlocal
set "str=Init., 12, TARO/ BLA BLA CDE"
set str=%str:, TARO/=&rem;%
echo %str%
这是有效的,因为在评估set
命令之前扩展了变量。因此,当评估该行时,它被评估为......
set str=Init.,12&rem; BLAH BLAH CDE
...作为set var=value & rem (rest of line ignored)
你也可以echo %str:, TARO/=&rem;%
并达到同样的效果。
答案 2 :(得分:5)
这是一个更强大的解决方案,即使字符串包含引号或毒性字符也应该有效 - 用新行字符替换cutoff字符串。 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