我试图在batch file中使用string(而不是字符)作为分隔符来分割string。
该string的格式为:
string1 by string2.txt
分隔符是(是的,空格,单词“by”,后面是空格)。 我想要的输出是:
string1 string2
所以,基本上,通过分隔符将string拆分成2个部分by
并从第二个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%+