ユーザー作成のバッチファイルをデバッグする方法です。

「クラウド対応自動印刷」から起動してデバッグする場合は
「設定」で「プリンター/処理」->「.Batchファイルを実行する」->「詳細」->「Batchファイル実行時の画面を表示する」にチェックをいれます。

バッチファイル(.bat/.cmd)は出力確認・ログ化・段階的実行で効率よくデバッグできます。まずは「何が実行されているかを見える化」して、問題箇所を最小ブロックに絞ることが近道です。


すぐ使える基本テクニック

  • @echo off / echo on / echo メッセージ:実行コマンドや任意メッセージを表示して流れを把握する。
  • pause:途中で止めて出力を確認する。自動終了でログを見逃す事態を防ぐ。
  • rem:処理の意図やテスト手順をコメントで残す。
  • set / setlocal / endlocal:変数の確認やスコープ管理。現在の環境変数は set で一覧表示。
  • if errorlevel / %ERRORLEVEL% / if exist / if defined:コマンド戻り値、ファイル存在、変数有無で分岐・異常検出。

ログ化とリダイレクト

  • 標準出力 → ファイルsomecommand >> debug.log(追記)。
  • 標準エラーもログへsomecommand >> debug.log 2>&1
  • 開始/終了ログecho %date% %time% : START >> debug.log: END を残すと原因追跡が容易。
  • Timestamps:ログに時刻を入れると処理時間やどのコマンドで止まったか分かる。

切り分けと段階的検証

  • ラベルと call/goto でモジュール化:長い処理を小ブロックに分け、個別に実行して確認する。
  • 疑わしい箇所をコメントアウト:一部を無効化して最小構成で動作させる。
  • 一行実行で再現:コマンドプロンプトで問題のコマンドを直接実行して詳細出力を得る。

変数展開と空白・引用の注意点

  • パスや引数に空白がある場合は必ず引用符で囲む"C:\Program Files\app.exe"
  • 遅延展開が必要なケース:ループ内やサブルーチンで変数が変わる場合は setlocal enabledelayedexpansion!VAR! を使う。
  • 環境依存の差異:%PATH% や管理者権限の有無で動作が変わるので実行環境を確認する。

よくある失敗とチェックリスト

  • スペルミス・拡張子間違い:ファイル名・コマンド名を再確認。
  • 権限不足:管理者権限が必要な処理は昇格して実行。
  • 相対パスの誤り:カレントディレクトリが想定と違うと失敗する。cd /d %~dp0 を冒頭に入れてスクリプトの場所を基準にする。
  • 外部コマンドの戻り値無視:主要コマンド直後に if errorlevel 1 ( echo Failed & pause & exit /b 1 ) を入れる。
  • ログが残らない:自動閉じされると見逃すのでログ出力か pause を必ず入れる。

すぐ使えるテンプレ(冒頭と主要パターン)

  • スクリプト冒頭:
    • @echo off
    • setlocal enabledelayedexpansion
    • cd /d %~dp0
    • echo %date% %time% : START >> debug.log
  • コマンド実行とエラーハンドリング:
    • somecommand >> debug.log 2>&1
    • if errorlevel 1 ( echo %date% %time% : somecommand failed >> debug.log & pause & exit /b 1 )
  • 終了処理:
    • echo %date% %time% : END >> debug.log
    • endlocal
    • pause

開発環境と補助ツール

  • Visual Studio Code:ターミナルで即実行、検索・置換・シンタックス表示で編集が楽。
  • Sysinternals Process Monitor:ファイル/レジストリ/プロセスの詳細な失敗原因を調べる際に有効。
  • PAUSE で現場確認 → ログ化で自動運用対応