Windowsbatch file – 用string作为分隔符分割string

我试图在batch file中使用string(而不是字符)作为分隔符来分割string。

该string的格式为:

string1 by string2.txt 

分隔符是(是的,空格,单词“by”,后面是空格)。 我想要的输出是:

 string1 string2 

所以,基本上,通过分隔符将string拆分成2个部分by并从第二个string中删除后缀。 我怎样才能做到这一点?

Solutions Collecting From Web of "Windowsbatch file – 用string作为分隔符分割string"

尝试这个:

 for /F "tokens=1,3 delims=. " %%a in ("%string%") do ( echo %%a echo %%b ) 

也就是说,把第一个和第三个标记由空间或点分隔…

我最近发现了一个有趣的技巧,允许“以字符串分隔字符串作为分隔符”,所以我忍不住把它作为一个新的答案在这里发布的诱惑。 注意“显然这个问题不准确,首先,string1和string2都可以包含空格,其次,string1和string2都可以包含&符号('&')” 。 这种方法正确地与新的规范 (张贴在Stephan的答案下发表评论)。

 @echo off setlocal set "str=string1&with spaces by string2&with spaces.txt" set "string1=%str: by =" & set "string2=%" set "string2=%string2:.txt=%" echo "%string1%" echo "%string2%" 

有关拆分方法的更多详细信息,请参阅此文章 。

 @ECHO OFF SETLOCAL SET "string=string1 by string2.txt" SET "string=%string:* by =%" ECHO +%string%+ GOTO :EOF 

上面的SET命令将删除不需要的数据。 +之间显示的结果表明没有空格。

公式:set var =%somevar:* string1 = string2%

将var分配给var的所有字符的string1替换为string2。 set命令中的封闭引号确保行中的任何零散尾随空格不包含在赋值中。

我扩大了Magoos的答案,以获得所需的字符串:

 @ECHO OFF SETLOCAL enabledelayedexpansion SET "string=string1 by string2.txt" SET "s2=%string:* by =%" set "s1=!string: by %s2%=!" set "s2=%s2:.txt=%" ECHO +%s1%+%s2%+