2017-10-01 11 views
-1

これはいくつかのことには思えますが、私は数時間苦労しました。Windowsバッチ - 別の文字列で単語に一致する1つの文字列内の単語を検索し、出力をキャプチャします。

MYFOLDER,JobE,JobD_ENDED_OK, 
MYFOLDER,JobD,JobC_ENDED_OK,JobD_ENDED_OK 
MYFOLDER,JobD,JobB_ENDED_OK, 
MYFOLDER,JobC,JobA_ENDED_OK,JobC_ENDED_OK 
MYFOLDER,JobB,JobA_ENDED_OK,JobB_ENDED_OK 
MYFOLDER,JobA,,JobA_ENDED_OK 

私はをループする必要があるとトークン4 1の行が別の行に3トークンと一致すると、ファイルへのステートメントをエコーどこ見つける:

は、私はファイルを持っています。私はそれがDOとのFORループを知っている

MYFOLDER_JobA_MYFOLDER_JobB matches JobA_ENDED_OK 
MYFOLDER_JobA_MYFOLDER_JobC matches JobA_ENDED_OK 
MYFOLDER_JobB_MYFOLDER_JobD matches JobB_ENDED_OK 
MYFOLDER_JobC_MYFOLDER_JobD matches JobC_ENDED_OK 
MYFOLDER_JobD_MYFOLDER_JobE matches JobD_ENDED_OK 

、私はちょうどそれの残りの部分を取得していない午前:私はこれを示して、出力ファイルを探しています。

ご協力いただきまして誠にありがとうございます。

+0

あなたのコードも投稿してください - あなたが間違っている場所を誰かが見つけられるかもしれません – cup

+0

あなたの試行を示してください。また、希望する出力が入力データとどのように一致するかを表示してください。たとえば、出力に「JobE」と表示されますが、入力データには「JobE」という言葉はありません。 – Magoo

+0

@Magoo 1行目の3パラメータが2行目の4パラメータと一致します。 – Pat

答えて

0
@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET "sourcedir=U:\sourcedir" 
SET "destdir=U:\destdir" 
SET "filename1=%sourcedir%\q46510665.txt" 
SET "outfile=%destdir%\outfile.txt" 
(
FOR /f "usebackqdelims=" %%h IN ("%filename1%") DO (
SET "col4line=%%h" 
SET "col4line=!col4line:,=|,|!" 
FOR /f "tokens=1-4delims=," %%a IN ("!col4line!") DO IF "%%d" neq "|" (
    FOR /f "usebackqdelims=" %%H IN ("%filename1%") DO (
    SET "col3line=%%H" 
    SET "col3line=!col3line:,=|,|!" 
    FOR /f "tokens=1-4delims=," %%A IN ("!col3line!") DO (
    IF "%%d|"=="%%C" (
    SET "reportline=%%a_%%b_%%A_%%B matches %%C" 
    ECHO !reportline:^|=! 
    ) 
    ) 
) 
) 
) 
)>"%outfile%" 

GOTO :EOF 

あなたの状況に合わせてsourcedirdestdirの設定を変更する必要があります。

私のテストのためにあなたのデータを含むq46510665.txtという名前のファイルを使用しました。

は、連続,が分離されるように|,|,を置き換え、次いで、ファイル内の各行について%

OUTFILE%として定義ファイルを生成%%h介して行全体に可変col4lineを設定しました。 Tokeniseを,に設定し、4番目のトークン(つまり最後の列が空の)として単に|の行を無視します。

col3line%%Hを繰り返しファイル内のすべての行のためのプロセス、この時間(ノートケース差が異なる実際のメタ変数を使用する)と3列目は、外側ループから4列+ |に一致する場合、からレポートラインを組み立てますトークンを出力し、|を削除します。

+0

ありがとう@Magoo。私はいくつのFORループが必要なのか分からなくて、私は2つで試していましたが、SETを使用していませんでした。 非常に感謝しています! – Pat

関連する問題