3

これが重複した質問である場合は申し訳ありません:-)

バッチスクリプトから以下のコード行を取得しました。(script.bat)

echo %DATE% %TIME% some text ... >> %logfile% | c:\path\script1.bat >> %logfile%

ここでのパイプ ( | ) 記号の意味は何ですか?

script.bat はコマンド ライン (script.bat) から正常に動作しており、script1.bat も実行しています。

スケジュールされたタスクから script.bat を実行しているときに、script1.bat の実行に断続的に失敗し、エラーレベル 1 で終了します。

誰でもこれが何かわかります| ここで行って :-)

4

1 に答える 1

5

パイプが通常何に使用されるかを知っていると思います。コードでは、パイプの両側で stdout がファイルにリダイレクトされます。したがって、パイプは通常の目的を果たしていません。

Windows がパイプを実装する方法cmdは、パイプの両側で新しいスレッドを起動することです。

あなたの場合、|2つのコマンドの並列処理をインスタンス化するための迅速で汚い方法です。

アップデート

パイプの両側が stdout を同じログ ファイルにリダイレクトしていることに気付きました。一度に 1 つのcmdプロセス (またはスレッド) しか書き込みアクセス用にファイルを開くことができないため、これは機能しません。コマンドラインからは確かにうまくいきません。次のエラーが表示されます:The process cannot access the file because it is being used by another process.失敗しない唯一の方法は、logfileが に設定されている場合ですnul

&推測する必要がある場合、元の開発者は の代わりに使用するつもりだったと思います|。単一の ECHO ステートメントを別のバッチ スクリプトと並行して実行する理由はありません。最初のステートメントは単なるタイムスタンプのようです。

あなたのコードは次のようになるはずです

echo %DATE% %TIME% some text ... >> %logfile% & call c:\path\script1.bat >> %logfile%

またはさらに良い

>>%logfile% (
  echo %DATE% %TIME% some text ...
  call c:\path\script1.bat
)
于 2013-08-29T16:56:56.997 に答える