拆分字符串作为分隔符

use*_*179 23 windows split cmd batch-file

我正在尝试使用字符串(而不是字符)作为分隔符在批处理文件中拆分字符串.

该字符串的格式为:

string1 by string2.txt
Run Code Online (Sandbox Code Playgroud)

分隔符是by(是的,空格,单词'by',后跟空格).我想要的输出是:

string1

string2
Run Code Online (Sandbox Code Playgroud)

因此,基本上,通过分隔符将字符串拆分为2个部分,by并从第二个字符串中删除后缀.我怎样才能做到这一点?

Aac*_*ini 40

试试这个:

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

也就是说,用空格或点分隔第一个和第三个标记......

  • 不用了,谢谢.我认为OP应该意识到这个问题的答案是采用第一和第三代币,也就是说,我认为他不希望第二个代币恰好是"通过"`(只是我的观点`:) (3认同)
  • 这种方式更简单:`for /F "tokens=1,2 delims=." %%a in ("%string: by =.%") do echo %%a, %%b` (2认同)

Aac*_*ini 14

我最近发现了一个有趣的技巧,允许"将字符串拆分为字符串作为分隔符",所以我无法抗拒将其作为新答案发布在此处的诱惑.请注意"显然问题不准确.首先,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%"
Run Code Online (Sandbox Code Playgroud)

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

  • @Andrew:很简单...这行:`set“ string1 =%str:by =”&set“ string2 =%”`只是将str:“中的这一部分替换为by by this:`”&set“ string2 =`,然后_then_执行结果行。我建议您使用文本编辑器执行相同的操作:首先输入以下行:`set“ string1 = string1&withspaces by string2&withspaces.txt”,然后执行先前的替换;结果行应该是这一行:`set“ string1 = string1&withspaces”&set“ string2 = string2&withspaces.txt”`。您也可以删除“ @echo off”行,运行程序并在屏幕中查看执行的行。 (3认同)
  • 你能解释一下为什么这有效吗?这对我来说非常令人困惑。 (2认同)

Mag*_*goo 8

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

GOTO :EOF
Run Code Online (Sandbox Code Playgroud)

上述 SET 命令将删除不需要的数据。结果显示在 + 之间以证明不存在空格。

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

将向 var 分配 somevar 的值,并将 string1 之前的所有字符替换为 string2。set 命令中的引号可确保行上的任何杂散尾随空格不包含在分配的值中。

  • 有没有办法用它来获取 by 之前的部分?我尝试了 `SET "string2=%string: by *=%"` 但这不起作用。 (2认同)