如何在特定单词之后剪切字符串?
只要字符串, 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)
,但你也可以使用@
,#
或任何其他字符这不在你的字符串中)
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;%
复合命令,并达到相同的效果。
只要字符串在截止字符串之前不包含引号或有毒字符,该字符串应该工作正常,示例文本 – dbenham
这里是一个更强大的解决方案,如果字符串包含引号或毒文字上应该甚至工作 - 更换截止串用新行字符。 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
尽快更换''通过在string'你'echo'命令行string1'(EHICH我想只是一个错字),你的回答工作,如果有喜欢的'无有毒字符“'或' ='在初始字符串中,如果它不以'*'或'〜'开头...... – aschipfl