バッチファイルのログ出力とデバッグテクニックを解説します。リダイレクト・追記・@echo on/offを使いこなして効率よくデバッグしましょう。
リダイレクトの基本
| 記号 | 意味 | 例 |
|---|
| > | 上書きでファイルに出力 | echo test > log.txt |
| >> | 追記でファイルに出力 | echo test >> log.txt |
| 2> | エラー出力をファイルへ | command 2> error.txt |
| 2>> | エラー出力を追記 | command 2>> error.txt |
| 2>&1 | エラー出力を標準出力にマージ | command > all.txt 2>&1 |
| nul | 出力を捨てる(非表示) | command > nul |
タイムスタンプ付きログの実装
@echo off
set LOGFILE=C:\logs\batch_log.txt
:: ログ出力関数
call :log "処理開始"
:: 処理
copy C:\data\*.csv D:\backup\ > nul 2>&1
if errorlevel 1 (
call :log "エラー: CSVコピー失敗"
) else (
call :log "成功: CSVコピー完了"
)
call :log "処理終了"
pause
exit /b 0
:log
echo %DATE% %TIME% %~1 >> "%LOGFILE%"
echo %DATE% %TIME% %~1
exit /b 0
デバッグテクニック
| テクニック | 方法 |
|---|
| コマンド表示モード | @echo off を外す、または echo on で有効化 |
| 変数の値を確認 | echo 変数名=%変数名% を途中に挿入 |
| 一時停止して確認 | pause を途中に挿入 |
| 条件付きデバッグ | if defined DEBUG echo %VAR% のように制御 |
まとめ
- >で上書き、>>で追記、2>&1でエラー出力を標準出力にマージできる
- > nul でコマンドの出力を非表示にできる
- ログ関数を作るとタイムスタンプ付きのログを効率よく出力できる
- デバッグ時はecho onで全コマンドを表示して変数の中身を追う
- 次の記事では管理者昇格(UAC)を学ぶ
コメント