2017-05-23 24 views
1

サブ文字列を含む文字列があり、,.-;などの文字セットで区切られています。私はその文字列を多くの部分文字列に分割する必要があります。そして、forループとの分割がどのように機能するのかを理解する必要があるので、必要に応じて他の文字を追加することができます。文字列を文字列で分割する方法は?

例:AAA、BBBCCCDDDEEE

set string=aaa,bbb.ccc-ddd;eee 
for /f "tokens=1* delims=-.," %%a in ("%string%") do (echo %%a, %%b) 

私は、この例では5つのストリングの結果を取得する必要があります。そのforループでは、通常のプログラミング言語のように、これらの部分文字列のそれぞれについて作業したいと思います。しかし、これが私を殺している。

私は、AAAようbbb.ccc DDDに取得; EEEを。 2つの部分文字列のみ。私は間違って何をしていますか?また、1000の部分文字列があるかもしれません。

答えて

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一部

+0

に入るようにするには、分割文字列には他の選択肢はありません意味ですか? – Bitterblue

+0

@Bitterblueいくつかあります。しかし、彼らはもう少し高度な技術を使います – jeb

関連する問題