2017-03-06 29 views
1

私はバッチスクリプトがジョブを正常に完了した後にリストから資産タグを削除しようとしています。コードブロック。findstrを使用して.txtファイル内の1行を削除する方法バッチ

FOR /F %%G IN (PingResults2.txt) DO (
    @psexec -s -w C:\ \\%%G -c -f "USMTCAPTURE.cmd" 
    IF !errorlevel! equ 0 (
     echo %%G >> usmtdone.txt 
     findstr /V %%G ToPingList2.txt > ToPingList2.txt 
    ) 
) 

限り、私は自分のコードの一部が正常に機能しているが、それは私のループでこの行になるとき、それは単にファイル全体を一掃されて言うことができるように。

findstr /V %%G ToPingList2.txt > ToPingList2.txt

私がテストし、それが動作するはずのように私には見えます。 findstr /V %%G ToPingList2.txtそれはファイル内の他のすべての行のテキストを自己呼び出しし、私がfindstr /V %%G ToPingList2.txt >> ToPingList2.txtをテストしたとき、ファイル内の他のすべての行を2度追加しました。だから、findstr /V %%G ToPingList2.txt > ToPingList2.txtはファイル全体をきれいに拭くのはなぜですか?

+0

おそらく、あなたが既にToPingList2.txtを読み込み用に開いているときに書き込むことを試みているからです。 'findstr'が完了したら、別のファイルに出力してから、' move/y newfile ToPingList2.txt> NUL'を試してみてください。 – rojo

答えて

0

findstrがまだ入力として処理している間に、コピー先のファイルを上書きしています。 usmtdone.txtにエントリを格納しているので、forループの後の1つのステップでそれらのエントリを簡単に削除できます。

FOR /F %%G IN (PingResults2.txt) DO (
    @psexec -s -w C:\ \\%%G -c -f "USMTCAPTURE.cmd" 
    IF !errorlevel! equ 0 (
    echo %%G >> usmtdone.txt 
) 
) 
findstr /V /G:usmtdone.txt ToPingList2.txt >ToPingList2.tmp 
Move /Y ToPingList2.tmp ToPingList2.txt 
0

ありがとうございました。私は少しあなたの推薦とは別のコードをやって、私はそれが私が自分の答えを投稿すると思ったので、私はそれを必要とすることをやった。その一時的に値を格納し、それを元に移動するには、.tmpファイルを使用すると、私が行方不明だったようです。

FOR /F %%G IN (PingResults.txt) DO (
@psexec -s -w C:\ \\%%G -c -f "USMTCAPTURE.cmd" 
IF !errorlevel! equ 0 (
echo %%G >> usmtdone.txt 
findstr /V %%G ToPingList2.txt > ToPingList2.tmp 
Move /Y ToPingList2.tmp ToPingList2.txt 
) 
) 

ご協力いただきありがとうございます。コードは美しく今実行されます。

関連する問題