Windows Server 2008を使用して、Windowsタスクスケジューラで実行されているスクリプトの出力をキャプチャするにはどうすればよいですか?
私はかなり長いカスタム印刷バッチスクリプトをテストしていますが、デバッグのために、毎晩それからのすべての出力を確認したいと思います。
これをタスクスケジューラのコマンド文字列として試してください。
cmd /c yourscript.cmd > logall.txt
Stderr(ほとんどのエラーが発生する場所):
cmd /c yourscript.cmd > logall.txt 2>&1
Yourscript.cmdを呼び出すdebug.cmdを使用できます
yourscript.cmd > logall.txt
yourscript.cmdの代わりにdebug.cmdをスケジュールします
>>
は、毎回上書きするのではなく、ログファイルを追加します。 2>&1
は、ログファイルにもエラーを送信します。
cmd /c YourProgram.exe >> log.txt 2>&1
次のように出力する行のログファイルに書き込むことができます。
@echo off
echo Debugging started >C:\logfile.txt
echo More stuff
echo Debugging stuff >>C:\logfile.txt
echo Hope this helps! >>C:\logfile.txt
このように、すべてをトロールしたくない場合に出力するコマンドを選択できます。必要なものだけを取得します。 >
は、指定されたファイルに出力します(存在しない場合はファイルを作成し、存在する場合は上書きします)。 >>
は、指定されたファイルに追加します(ファイルが存在しない場合はファイルを作成し、存在する場合はコンテンツに追加します)。
cmd.exe
コマンドプロセッサを使用して、タイムスタンプ付きのファイル名を作成し、スケジュールされたタスクの出力を記録しますここで他の人からの回答に基づいて作成するには、ファイル名に日付や時刻が埋め込まれた出力ファイルを作成することもできます。 cmd.exe
コマンドプロセッサを使用して、これを行うことができます。
注:この手法は、内部Windows環境変数の文字列出力を取得し、文字位置に基づいてそれらをスライスします。このため、以下の例で提供される正確な値は、使用しているWindowsの地域に対して正しくない場合があります。また、一部の地域設定では、日付または時刻の一部のコンポーネントは、値が10未満の場合、作成されたファイル名にスペースを導入する場合があります。 nameは、構築しているコマンドラインを壊しません。実験して、状況に最適なものを見つけてください。
PowerShell
はcmd.exe
よりも強力であることに注意してください。より強力な方法の1つは、さまざまなWindowsリージョンに対応できることです。しかし、この答えはPowerShell
ではなくcmd.exe
を使用してこの問題を解決することなので、続行します。
cmd.exe
を使用
次のように、内部環境変数%date%
および%time%
をslicingすることにより、日付と時刻のさまざまなコンポーネントにアクセスできます。 、正確なスライス値はWindowsで設定された地域に依存します):
%date:~10,4%
%date:~4,2%
%date:~7,2%
%time:~0,2%
%time:~3,2%
%time:~6,2%
この日付/時刻形式「Log_[yyyyMMdd]_[hhmmss].txt
」を使用してログファイルに名前を付けたいとします。次を使用します。
Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt
これをテストするには、次のコマンドラインを実行します。
cmd.exe /c echo "Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt"
まとめて、スクリプトからstdout
とstderr
の両方を現在の日付と時刻で指定されたログファイルにリダイレクトするには、コマンドラインとして次を使用します。
cmd /c YourProgram.cmd > "Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt" 2>&1
ファイル名を引用符で囲んで、日付または時刻コンポーネントがスペース文字を導入する可能性があるインスタンスを処理することに注意してください。
私の場合、現在の日付/時刻が2017年5月10日午前9時5分34秒である場合、上記のコマンドラインは以下を生成します。
cmd /c YourProgram.cmd > "Log_20171005_ 90534.txt" 2>&1