システムから情報を収集するいくつかの簡単なコマンドを含むバッチファイルを作成しています。バッチファイルには、時間、IP情報、ユーザーなどを取得するコマンドが含まれています。
すべてのコマンドをバッチファイルにまとめて実行しましたが、実行して結果をテキストファイル(ログ)に出力するときにバッチファイルが必要です。バッチに追加できるコマンドはありますか?
cmdからバッチを実行して、出力をリダイレクトしたくないことに注意してください。可能であれば、バッチ内から出力をリダイレクトします。
システムから情報を収集するいくつかの簡単なコマンドを含むバッチファイルを作成しています。バッチファイルには、時間、IP情報、ユーザーなどを取得するコマンドが含まれています。
すべてのコマンドをバッチファイルにまとめて実行しましたが、実行して結果をテキストファイル(ログ)に出力するときにバッチファイルが必要です。バッチに追加できるコマンドはありますか?
cmdからバッチを実行して、出力をリダイレクトしたくないことに注意してください。可能であれば、バッチ内から出力をリダイレクトします。
回答:
ファイルポインターを複数回開いてEnd-Of-Fileに配置するため、遅い単純な単純な方法です。
@echo off
command1 >output.txt
command2 >>output.txt
...
commandN >>output.txt
より良い方法-ファイルのオープンと配置が一度だけなので、書き込みが簡単で高速です。
@echo off
>output.txt (
command1
command2
...
commandN
)
ファイルを一度だけ開いて配置するもう1つの優れた高速な方法
@echo off
call :sub >output.txt
exit /b
:sub
command1
command2
...
commandN
2020-04-17を編集
時々、2つ以上のファイルに繰り返し書き込みたい場合があります。画面に別のメッセージを表示することもできます。括弧で囲まれたブロックまたはサブルーチンの外側の未定義のハンドルにリダイレクトすることで、これを効率的に行うこと&
ができます。次に、表記法を使用して、すでに開いているファイルを参照します。
call :sub 9>File1.txt 8>File2.txt
exit /b
:sub
echo Screen message 1
>&9 File 1 message 1
>&8 File 2 message 1
echo Screen message 2
>&9 File 1 message 2
>&8 File 2 message 2
exit /b
同じコマンドで複数のリダイレクトを実行すると、Microsoftリダイレクト実装の設計上の欠陥により、ハンドル9と8を逆の順序で使用することを選択しました。それは非常にありそうもないですが、あなたが十分に頑張れば、そのアプローチでさえバグを露呈する可能性があります。リダイレクトをステージングした場合、問題を回避することが保証されます。
3>File1.txt ( 4>File2.txt call :sub)
exit /b
:sub
etc.
%~f0
、CALLed:subroutine内であっても、常にバッチスクリプトへの完全パスを提供します。
>output.txt 2>&1
cmd /?
またはhelp cmd
コンソールから実行します。3番目の方法のトリックは、CALLのリダイレクトがCALLされたサブルーチン内のすべてのコマンドに適用されることです。
アウトストリームとエラーストリームの両方をリダイレクトしたい場合
dir >> a.txt 2>&1
私はこれが古い投稿であることを知っていますが、誰かがGoogle検索で偶然見つけてしまいます。また、コメントでOPが尋ねたいくつかの質問が具体的に扱われていないようです。また、これはSOに投稿された私の最初の回答です。:)
動的に生成されたファイル名を使用して出力をファイルにリダイレクトするために、@ dbenhamが提供する2番目のソリューションは、後を追う(read:quick&dirty)アプローチです。たとえば、これは次のとおりです。
@echo off
> filename_prefix-%DATE:~-4%-%DATE:~4,2%-%DATE:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log (
echo Your Name Here
echo Beginning Date/Time: %DATE:~-4%-%DATE:~4,2%-%DATE:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log
REM do some stuff here
echo Your Name Here
echo Ending Date/Time: %DATE:~-4%-%DATE:~4,2%-%DATE:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log
)
ターゲットディレクトリ内のファイルのこのスクリーンショットにあるようなファイルを作成します
それはこの出力を含みます:
Your Name Here
Beginning Date/Time: 2016-09-16_141048.log
Your Name Here
Ending Date/Time: 2016-09-16_141048.log
また、このソリューションはロケールに依存するため、使用方法と使用方法には注意してください。
バッチファイルの先頭近くに次の2行を追加すると、すべてのstdoutとstderrがlog.txtにリダイレクトされます。
if not "%1"=="STDOUT_TO_FILE" %0 STDOUT_TO_FILE %* >log.txt 2>&1
shift /1
バッチファイルの下部に次の行を追加すると、CMDウィンドウ内に表示されているとおりにすべてが取得され、テキストファイルにエクスポートされます。
powershell -c "$wshell = New-Object -ComObject wscript.shell; $wshell.SendKeys('^a')
powershell -c "$wshell = New-Object -ComObject wscript.shell; $wshell.SendKeys('^c')
powershell Get-Clipboard > MyLog.txt
基本的に、すべて選択 -> クリップボードにコピー -> テキストファイルに貼り付けを実行します。