Windows Server 2008を使用して、Windowsタスクスケジューラで実行されているスクリプトの出力をキャプチャするにはどうすればよいですか?
私はかなり長いカスタム印刷バッチスクリプトをテストしています。デバッグのために、毎晩それからのすべての出力を確認したいと思います。
Windows Server 2008を使用して、Windowsタスクスケジューラで実行されているスクリプトの出力をキャプチャするにはどうすればよいですか?
私はかなり長いカスタム印刷バッチスクリプトをテストしています。デバッグのために、毎晩それからのすべての出力を確認したいと思います。
回答:
これをタスクスケジューラのコマンド文字列として試してください。
cmd /c yourscript.cmd > logall.txt
cmd /c ""C:\temp\My test dir\something 123\myTool.exe" > Tilo_log.txt 2>&1"
>>
ログファイルを追加するのではなく、そのたびに上書きされます。2>&1
また、ログファイルにエラーを送信します。
cmd /c YourProgram.exe >> log.txt 2>&1
cmd.exe
コマンドプロセッサを使用して、タイムスタンプ付きのファイル名を作成し、スケジュールされたタスクの出力をログに記録しますここで他の人の回答に基づいて構築するには、ファイルの名前に日付や時刻が埋め込まれた出力ファイルを作成したい場合があります。cmd.exe
コマンドプロセッサを使用してこれを行うことができます。
注:この手法は、内部Windows環境変数の文字列出力を受け取り、文字位置に基づいてそれらをスライスします。このため、以下の例で提供されている正確な値は、使用しているWindowsの領域に対して正しくない場合があります。また、地域設定によっては、日付または時刻の一部のコンポーネントによって、値が10未満の場合に、作成されたファイル名にスペースが導入される場合があります。この問題を軽減するには、ファイル名を引用符で囲み、ファイル内の意図しないスペースがnameは、作成しているコマンドラインを壊しません。実験して、状況に最も適したものを見つけてください。
その点に注意してくださいPowerShell
よりも強力ですcmd.exe
。より強力な方法の1つは、さまざまなWindowsリージョンを処理できることです。しかし、この答えはcmd.exe
、ではなくを使用してこの問題を解決することに関するものなPowerShell
ので、続行します。
使用する cmd.exe
次のように、内部環境変数とをスライスすることで、日付と時刻のさまざまなコンポーネントにアクセスできます(ここでも、正確なスライス値はWindowsで構成されている領域によって異なります)。%date%
%time%
%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年10月5日9:05:34 AMである場合、上記のコマンドラインは次のようになります。
cmd /c YourProgram.cmd > "Log_20171005_ 90534.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
このようにして、すべてをトロールしたくない場合に出力するコマンドを選択し、必要なものだけを取得できます。>
指定されたファイルへの意志を出力し(それが存在しない場合は、ファイルを作成し、それがない場合は、それを上書きします)。>>
指定されたファイル(それが存在しない場合はファイルを作成するが、それがない場合は内容を追加)に追加します。
プログラムを実行し、stdoutとstderrをタイムスタンプ付きのファイルに書き込む方法の例:
cmd /c ""C:\Program Files (x86)\program.exe" -param fooo >> "c:\dir space\Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt" 2>&1"
重要な部分は、後ろ全体を二重引用符で囲みcmd /c
、内部では通常どおり二重引用符を使用することです。また、日付はロケールに依存することに注意してください。この例はUSロケールを使用して動作します。