プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。
バッチファイルとコマンドプロンプトについて、少々お伺いしたいことがあります。

まず、コマンドプロンプトで以下のコマンドを打ち込んでみたところ、すべて正常に実行することができました。

ping [example.com] > result.txt
tracert [example.com] >> tr_result.txt
ipconfig /all > ipc_result.txt

次に、各コマンドをテキストファイルに書き込んで、それぞれ

"p_test.bat" # 内容は ping コマンド
"tr_test.bat" # 内容は tracert コマンド
"ipc_test.bat" # 内容は ipconfig コマンド

と命名しデスクトップに配置、ダブルクリックで実行してみました。
すると、このうち正常に実行(結果をテキストファイルに出力)されたのは

tr_test.bat

のみでした。
ここで質問なのですが、なぜこのような違い(バッチファイルにすると実行できるものとできないものに分かれる)が起こるのでしょうか?
バッチファイルの作り方やとコマンドプロンプトについて調べてみましたが、説明を見つけることが出来ませんでした。
この辺の理論について詳しい方がおりましたら、ご教示頂きたく思います。

ちなみに、OS は Windows XP SP2 です。

よろしくお願いいたします。

A 回答 (2件)

状況がつかめません。



DOS窓で実行する場合と、バッチファイルにして実行する場合の違いは、環境変数の指定の違いくらいな物です。この場合、「実行ができなかった」「実行したが、途中で止まっている(ハング状態)」「実行したが、エラーで終わっている」などがあります。これらを説明する必要があります(解明する必要がある)。

>このうち正常に実行(結果をテキストファイルに出力)されたのは

この辺の内容を詳細に書きましょう。

1.実行されない場合、DOS窓が起動してこない場合は、拡張子を確認してみましょう。よくあるのが、
p_test.bat.txt
となっている場合があります。また、文字がスペースが全角になっている場合。タブが入っている場合。

2.”>”でリダイレクトをした場合、出力されるものが無くてもファイルは作成されます(0バイトのファイルが作成される場合も)。ファイルは作成されなかったのでしょうか、それとも0バイトのファイルが作成されましたか?

3.もし、ファイルが作成されていて、中身が、0バイト(何も無い状態)であれば、まだ出力前で、コマンドがハング状態になっている。そこで例えば、起動してきたDOS窓を終了させると、0バイトのファイルができる。

4.同じくファイルができているが、中身がエラーの内容がある。これをある人に言わせると「正常に実行していない」と言うことになります。そこに書かれている内容を記載しましょう。じゃないと、何でエラーになっているのか、だれにも分かりません。

このように、上記でもパソコンは状況に応じた「正常に実行」が行われています。「正常に実行」と言っているが、あなたにとっての「正常に実行」を詳細に説明しないと、わかりません。

それと、バッチファイルだけでなくプログラミングの初歩の初歩の失敗に、半角スペースと全角スペースを間違って入力する事があります。プログラム(バッチファイルのようなスクリプトも)は全て半角のスペースですのできおつけましょう。タブもだめですね。キャラクター文字(< | ? など)も全部半角です。

それと、コマンドがメッセージを出力する場合、「標準出力」と「エラー出力」などがあります。これは、出力先が違っています。よく、終了コードが0とか1とか"errorlebel"で拾える物がありますが、そのコードがエラーコード(1以上など)で終わる場合、「エラー出力」に出力されます。

どういうことかと言うと”>”でファイルにメッセージをリダイレクトした場合、通常コマンドが「標準出力」に出力したメッセージのみがファイルにリダイレクトされます。「エラー出力」に出力されるものを、リダイレクトする場合は、

ping [example.com] > result.txt 2>&1

すればできます。エクスプローラーのヘルプの検索で”リダイレクト”で検索してください。詳細がでます。また、”バッチファイル”で概略がでます。

>バッチファイルの作り方やとコマンドプロンプトについて

バッチファイルと呼ばれているものは、CMD.exe と言うコマンドが仮想的に作り出したDOS環境で、DOSコマンドとコマンドライン実行用ユーテリティー(pingなど)で、構成されています。なんで、基本的には、MS-DOSの関連本やサイトをみればサンプルなどがあります。
    • good
    • 0

実際に動いていないのか?エラーメッセージがでてないか?を調べるために、各バッチファイルの最後に pause を入れてみてはどうでしょうか?


例えば、p_test.batだったら
ping [example.com] > result.txt
pause
という感じです。
「続行するには何かキーを押してください..」とでて、コマンドプロンプトが表示されたままになるので、実行時のエラーメッセージなどを確認できます。

それと、tracert [example.com] >> tr_result.txt だけは 「>>」 で追加書き込みになっています。
もしかして、もともとあった動いた時の出力結果に、失敗した内容(=空)を追加した状態(=もともとの出力結果)を見て、正常に実行された、と思ってませんか?
一旦、tr_result.txtを削除するなりリネームするなりしても動作しますか?
tr_test.batだけ動くというのがちょっとわからないので。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!