如何在特定单词后剪切字符串?
How to cut string after a specific word?
如何在字符串 , TARO/
出现时立即在我的 .bat 文件中剪切这些字符串?
Init., 12, TARO/ BLA BLA CDE
Ademanto, TARO/ BLA BLA XYZ
之后我只想有Init., 12
和Ademanto
。
我不能在 FOR 中使用定界符,因为它仅限于一个字符,对吗?
set
可以从开头剪切到定义的字符串,但不能从定义的字符串剪切到结尾。使用一个小技巧有帮助:
setlocal enabledelayedexpansion
set "string=Init., 12, TARO/ BLA BLA CDE"
set "str=%string:*TARO/=TARO/%"
echo "!string:%str%=!"
(仅将包含分隔符字符串 (*TARO/
) 的字符串的开头替换为分隔符字符串 (TARO/
)。在第二步中,删除找到的字符串)
另一种方法是将 delimiter-string 替换为单个 char 分隔符(任何确定不在字符串中的字符。(下面的奇怪符号 (þ
) 是 chr(127)
,但您也可以使用 @
、#
或任何其他不在您的字符串中的字符)
for /f "delims=þ" %%i in ("%string:TARO/=þ%") do echo %%i
还有另一种方法。将 , 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;%
达到同样的效果。
这是一个更强大的解决方案,即使字符串包含引号或有害字符也应该有效 - 用换行符替换截止字符串。 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/
出现时立即在我的 .bat 文件中剪切这些字符串?
Init., 12, TARO/ BLA BLA CDE
Ademanto, TARO/ BLA BLA XYZ
之后我只想有Init., 12
和Ademanto
。
我不能在 FOR 中使用定界符,因为它仅限于一个字符,对吗?
set
可以从开头剪切到定义的字符串,但不能从定义的字符串剪切到结尾。使用一个小技巧有帮助:
setlocal enabledelayedexpansion
set "string=Init., 12, TARO/ BLA BLA CDE"
set "str=%string:*TARO/=TARO/%"
echo "!string:%str%=!"
(仅将包含分隔符字符串 (*TARO/
) 的字符串的开头替换为分隔符字符串 (TARO/
)。在第二步中,删除找到的字符串)
另一种方法是将 delimiter-string 替换为单个 char 分隔符(任何确定不在字符串中的字符。(下面的奇怪符号 (þ
) 是 chr(127)
,但您也可以使用 @
、#
或任何其他不在您的字符串中的字符)
for /f "delims=þ" %%i in ("%string:TARO/=þ%") do echo %%i
还有另一种方法。将 , 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;%
达到同样的效果。
这是一个更强大的解决方案,即使字符串包含引号或有害字符也应该有效 - 用换行符替换截止字符串。 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