.BATスクリプトをデバッグするにはどうすればよいですか?


96

.batスクリプトをステップ実行する方法はありますか?実は、他の多くのスクリプトを呼び出すビルドスクリプトがあり、それらが呼び出される順序を確認したいので、どこに行って変更を加える必要があるかを正確に知ることができます。


4dosにはデバッガが組み込まれています。

回答:


69

私は.BATファイルの実行を通じてステップにとにかくを知りませんが、使用することができますechoし、pauseデバッグを支援します。

ECHO
バッチファイル内のメッセージをエコーし​​ます。ECHO Hello Worldなどは、実行時に画面にHello Worldを出力します。ただし、バッチファイルの先頭に@ECHO OFFがない場合は、「ECHO Hello World」と「Hello World」も表示されます。最後に、空白行を作成するだけの場合は、ECHOと入力します。最後にピリオドを追加すると、空の行が作成されます。

PAUSE
続行するには任意のキーを押すようにユーザーに要求します。

ソース:バッチファイルヘルプ

@ workmad3:回答には、echoコマンドを操作するためのより良いヒントがあります。

別の役立つリソース... DDB:DOSバッチファイルのヒント


1
これらは私の唯一の選択肢だと思います。
Vhaerun、2008年

18

スクリプトに「echo off」ステートメントがないことを確認し、各スクリプトを呼び出した後に「echo on」を呼び出して、見逃したものをリセットします。

その理由は、エコーがオンのままになっていると、コマンドインタープリターが各コマンドを(パラメーター処理後)出力してから実行するためです。本番環境での使用には本当に見た目が悪くなりますが、出力がどこで間違っているかを確認できるため、デバッグの目的で非常に役立ちます。

また、呼び出されたバッチスクリプトとプログラムによって設定されたErrorLevelsをチェックしていることを確認してください。このために.batファイルで使用される2つの異なる方法があることに注意してください。プログラムを呼び出した場合、エラーレベルは%ERRORLEVEL%にありますが、バッチファイルからはエラーレベルがErrorLevel変数に返され、その周りに%を付ける必要はありません。


13

同様の懸念に直面して、簡単なGoogle検索を備えた次のツールを見つけました。

JPSoftの「Take Command」には、バッチファイルIDE /デバッガが含まれています。彼らの短いプレゼンテーションビデオはそれをうまく示しています。

数時間前から体験版を使っています。これが私の最初の謙虚な意見です。

  • 一方で、それは確かに.batおよび.cmdスクリプトのデバッグを可能にし、今ではかなりの場合に役立つと確信しています
  • 一方、それは時々ブロックし、私はそれを殺さなければなりませんでした...特に添え字をデバッグするとき(常に体系的にではありません)。それは「コールスタック」も「ステップアウト」ボタンも表示しません。

それは試してみます。


1
これはおそらくコメントになるはずです
KyleMit 2013年

8
@KyleMit理由を教えてください。これは他とは異なるスタンドアロンのソリューションであり、それは元の質問に答えますか?...それが持っていることを、コメントに収まるように十分に短いですので、そうではありません
Myobis

1
私は実際、おそらくどちらの方向にも行くことができるという意味で、しかし、それは一種のlmgtfy答えです。ヘルプセンターの回答セクション:Always quote the most relevant part of an important link。リンクがなければ、この回答は解決しますが、これもおそらく問題ありませんが、通常、このタイプの未テストの専用ソフトウェアに関するその場限りの提案は、コメントに最もよく当てはまります。お任せください。
KyleMit 2013年

8

「実行ステップ」(win32)ソフトウェアが、私が探していたものと完全に一致することがわかりました。http//www.steppingsoftware.com/

batファイルをロードし、ブレークポイントを配置するか、出力と環境変数を確認しながら、そのファイルをステップ実行できます。

評価版では、50行までしか実行できません...同様の機能を備えた無料の代替手段はありますか?


7
彼らはそのドメインを失い、おそらく廃業した。評価ソフトウェアは、web.archive.org / web / 20120421211043 / http://…からダウンロードできますが、ライセンスを購入することはできません。
twasbrillig 2014

6

@ECHO OFFを削除し、バッチファイルredirectin ALLの出力をログファイルに呼び出します。

c:> yourbatch.bat(オプションのパラメーター)> yourlogfile.txt 2>&1

で発見http://www.robvanderwoude.com/battech_debugging.php

できます!!2>&1を忘れないでください...

ウィズ


2

私が考えることができる唯一の方法は、echosとpausesでコードを回転させることです。


2

結果をファイルに再ルーティングしようとしましたか?whatever.bat> log.txtのように

この場合、呼び出された他のすべてのスクリプトも>> log.txtのようなファイルにログを記録していることを確認する必要があります。

また、バッチファイルの最初と最後に日付/ Tと時刻/ Tを入力すると、その時点での時刻が取得され、スクリプトの実行時間と順序をマップできます。


結果をファイルに書き込んでもそれほど役に立ちません。呼び出されるスクリプトはたくさんあります。また、実行される実行可能ファイルもたくさんあります。
Vhaerun、2008年

1
他のすべてのスクリプトとプログラムがstdinに書き込む場合、それらのメッセージもすべてログに記録されます。バッチを実行しただけで多くのメッセージが実行されている場合は、それらをログファイルにリダイレクトできます。
Biri

1

または....別の.batファイルからメインの.batファイルを呼び出し、結果を結果ファイルに出力します。

runner.bat> mainresults.txt

runner.batがメインの.batファイルを呼び出す場所

メインの.batファイルで実行されたすべてのアクションが表示されます。


0

よくある問題は、バッチスクリプトがアイコンをダブルクリックして実行されることです。ホスティングコマンドプロンプト(cmd.exe)インスタンスもそのとき終了するため、潜在的な出力やエラーメッセージを読み取ることができません。

このようなメッセージを読むには、コマンドプロンプトウィンドウを明示的に開き、適切な作業ディレクトリに移動して、パス/名前を入力してバッチスクリプトを実行することが非常に重要です。


0

cmd \kスクリプトの最後で使用してエラーを確認できます。実行後にコマンドプロンプトを閉じません


-3

または、cmdウィンドウを開き、そこからバッチを呼び出すと、出力が画面に表示されます。


2
これは、答えにならないほど多くの誤った仮定をします。おそらく最大の2つは、a)バッチファイルがコンソール出力を生成すると想定されていることです。必要はありません。b)バッチファイルが実際に機能していること
Leliel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.