2016-02-13 114 views
2

只要字符串, TARO/出現,我如何在我的.bat文件中剪切像這樣的字符串?如何在特定單詞之後剪切字符串?

Init., 12, TARO/ BLA BLA CDE 
Ademanto, TARO/ BLA BLA XYZ 

我只希望有Init., 12Ademanto之後。

我不能使用在分隔符,因爲它僅限於一個單一的性格吧?

回答

6

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 
+0

儘快更換''通過在string'你'echo'命令行string1'(EHICH我想只是一個錯字),你的回答工作,如果有喜歡的'無有毒字符「'或' ='在初始字符串中,如果它不以'*'或'〜'開頭...... – aschipfl

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

只要字符串在截止字符串之前不包含引號或有毒字符,該字符串應該工作正常,示例文本 – dbenham

5

這裏是一個更強大的解決方案,如果字符串包含引號或毒文字上應該甚至工作 - 更換截止串用新行字符。 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 
+0

現在,這是一些奇特的批處理作業。 – CoveGeek

+0

對我來說太過分了,我沒有收到這個。 – mifu

相關問題