只要字符串, TARO/
出現,我如何在我的.bat文件中剪切像這樣的字符串?如何在特定單詞之後剪切字符串?
Init., 12, TARO/ BLA BLA CDE
Ademanto, TARO/ BLA BLA XYZ
我只希望有Init., 12
和Ademanto
之後。
我不能使用在分隔符,因爲它僅限於一個單一的性格吧?
只要字符串, 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