2016-02-13 85 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

相关问题