如何通过一组字符拆分字符串?

时间:2017-05-23 12:41:21

标签: string batch-file for-loop

我有一个包含子字符串的字符串,这些子字符串由一组字符分隔,如db.executeSqlforkJoin,.以及其他字符。我需要将该字符串拆分为尽可能多的子字符串。我需要了解与循环的分裂是如何工作的,这样我就可以在需要时添加其他字符。

示例:

-

我需要在此示例中获得5个子字符串的结果: aaa bbb ccc ddd eee 。在for循环中,我喜欢使用这些子串中的每一个,就像在普通的编程语言中一样。但是这让我很难过。

我喜欢 aaa bbb.ccc-ddd; eee 。只有2个子串。我做错了什么?也可能有1000个子串。

1 个答案:

答案 0 :(得分:2)

FOR /F将一行分成多个标记(最多31个),但必须定义这些标记。

for /f "tokens=1-31 delims=-.," %%a in ("%string%") do ( echo %%a, %%b, %%c %%d, %%e, %%f, ... )

但在你的情况下,这对于多达100个令牌来说毫无用处。

但是您可以强制FOR /F假设它获得多行,并且对于每一行,标记化再次开始。

(set \n=^
%=EMPTY=%
)
setlocal EnableDelayedExpansion
FOR %%L in ("!\n!") do (
    set "multiLine=!string:-=%%~L!"
    set "multiLine=!multiLine:;=%%~L!"
    set "multiLine=!multiLine:,=%%~L!"
    set "multiLine=!multiLine:.=%%~L!"
)
for /f "tokens=*" %%a in ("!multiLine!") do ( 
    echo # %%a
)

首先,它会将您的所有字符-,;.替换为换行符\n FOR /F基于每行,因此您可以在每个循环中获得%%a个部分