web-dev-qa-db-ja.com

[Echo!file!| findstr]のパイプエラー

このスクリプトを使用して、ファイル名を含むログファイルを読み取り、これらのリストで文字列(ワイルドカードを含む)を検索しましたが、findstr関数のパイプが機能しません。

setlocal enabledelayedexpansion
for /f  %%A in (./Log.txt) do (
    set "file=%%A"
    echo !file!
    echo !file!|findstr ".*_DE.pdf"
    IF %ERRORLEVEL%==1 echo "gefunden"!file!
)

エラーが発生します:Ein Prozess hat versucht、zu einer nicht bestehenden Pipe zu schreiben。

翻訳済み:プロセスが存在しないパイプに書き込もうとしました

コマンドラインでのテストは問題ありません

構文の失敗やオプションの欠落があるといいのですが?

1
THxy

そのメッセージを受け取る唯一の方法は、パイプの右側(findstr)が閉じてから、左側(echo)がstdoutへの書き込みを終了することです。

findstrが正しいコマンドを実行していない限り、それがどのように可能かわかりません。現在のフォルダまたはPATHにfindstr.batなどがないことを確認してください。

このような問題を回避する(またはこれが問題であることを確認する)1つの方法は、FINDSTRへのフルパスを提供することです。

echo !file!|"%windir%\system32\findstr.exe" ".*_DE.pdf"

上記の変更で問題が解決した場合は、どこかに不正なFINDSTR実行可能ファイルが必要です。

1
dbenham