パイプが通常何に使用されるかを知っていると思います。コードでは、パイプの両側で 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
)