• ベストアンサー

BAT・CMD 違いは?

同じバッチファイルの拡張子ですが,.batと.cmd(WinNT系のみ)の違いはいったい何なのでしょうか。

noname#81135
noname#81135

質問者が選んだベストアンサー

  • ベストアンサー
  • gungnir7
  • ベストアンサー率43% (1124/2579)
回答No.3

>同じWinXPで,batの中にWinコマンドを記述し,cmdの中にDOSコマンドを >記述したとしても,全く問題なく動きますよね? 動きます。中身がプレーンテキストである以上、拡張子では判別できません。 batとcmdのどちらにどのように書いても問題ありません。 さて、このように書きましたがcmdの中にDOSコマンドをと書いてあるにを見ると まだ、よく把握されていない点があるようなので述べておきます。 WinXPにMS-DOSコマンドはありません。全てWindowsコマンドです。 慣例的にDOSコマンドと呼んでいますが、前の回答でも述べたように XPのコマンドは混乱がないようにMS-DOSコマンドを踏襲しているだけです。 したがって互換性の関係で一部動く16bitのDOSコマンドもありますが、 MS-DOSのコマンドをコピーして持ってきても動く保証はありません。 ここのところを勘違いしていると困るので補足しておきます。

noname#81135
質問者

お礼

分かりました。ウインドウズコマンドの事等以外な実態もあって驚きました。少し勘違いしていたようなのでここで知っておいてよかったです。ありがとうございました。

その他の回答 (2)

  • gungnir7
  • ベストアンサー率43% (1124/2579)
回答No.2

batもcmdも中身がテキストなのであまり変わりません。 差し当たって述べるならbatはDOSコマンド、cmdはWindowsコマンドといったところです。 ご存じのように9x系まではMS-DOSを最初にブートし、次にWindowsをブートしていました。 batに記述されるコマンドラインはMS-DOSコマンドです。 対してNT系のコマンドプロンプトに記述するコマンドラインは純粋にWindowsコマンドです。 (この部分は混乱がないようにMS-DOSに似せてあります) 両者は違うよと意識的に示したのがbatとcmdの違いです。 後は優先順位の順番が挙げられると思います。 環境変数PATHEXTには bat、cmdの順で書かれておりbatの方が優先です。 従って同一フォルダ内にa.batとa.cmdがあった場合、a.batが実行されます。

noname#81135
質問者

補足

解答ありがとうございます。batは純粋なMS-DOSのコマンドで,cmdはWindows用に拡張したコマンドを含んだバッチを区別するための拡張子と判断してよいでしょうか。ただ例えば,同じWinXPで,batの中にWinコマンドを記述し,cmdの中にDOSコマンドを記述したとしても,全く問題なく動きますよね?

  • notnot
  • ベストアンサー率47% (4845/10256)
回答No.1

同一のようです。Microsoftとしては使い分けてもらう意図があったんだと思いますが、失敗してます。 失敗しているというのは、例えば、Win9x系でもWinNT系でも動く仕組みを作るとして、Win9x用にgo.batを、WinNT用にgo.cmdを用意しておき、go と打つとWin9xならgo.batが動き、WinNTだとgo.cmdが動く・・・ということが出来ると、きっとcmdの拡張子も使われたんでしょうけど、実際にはWinNT系でもgo.batが動きます(初期設定のままの場合)。なので、go.batの中で%OS%等をみて判断し分けないといけないわけで、みんなbatを使い続けたと言うことでしょうね。

noname#81135
質問者

お礼

協力ありがとうございました。

関連するQ&A

  • batとcmdのちがいについて

    WindowsNT4.0において、~.batと~.cmdの違いはあるのでしょうか? もしあるとしたら、どのような違いでしょうか? 宜しく御願いします。

  • WindowsNT,Windows2000のバッチファイル

    おしえてください。 WindowsNT,Windows2000で作成するバッチファイルの拡張子は 「.bat」、「.cmd」のどちらがベターですか? WindowsNT,Windows2000でバッチファイルを作成して 実行したいのですが、そのバッチファイルの拡張子として (1)「.bat」、(2)「.cmd」の2種類で実行可能と認識しています。 私は (1)「.bat」は「command.com」、(2)「.cmd」は「cmd.exe」より動作すると 思っています。 よって(1)「.bat」だと16ビットで動作するため、何たかの不具合がでないのかなと懸念しています。 (1)「.bat」、(2)「.cmd」どちらでもいいのなら現在つくっている (1)「.bat」でいきたいのですが・・・。 どうかご回答お願いします。

  • BATファイル起動について

    お世話になっております。 javaのclassを実行する 以下の処理を行うbatファイルを作成したところ (ディレクトリ移動→classpathの設定→javaコマンド) cmd.exeよりこのbatファイルを実行すると 正常に動作してくれるのですが batファイルをダブルクリックすると javaを正常に実行しません。 errorや例外も特に発生していません。 batファイルを cmd.exeからの実行するのと ダブルクリックで実行するのには 何か違いがあるのでしょうか? よろしくお願いします。

  • コマンドプロンプトからのcmd実行について

    現在VBSでオブジェクトを定義しrunを使いcmd経由で他のバッチ・VBS・ソフトの起動をやっています。 ふととあるパスが実行できませんでした。 そこで別途個別にコマンドプロンプトだけで実行してみましたがやはりうまく処理できません。 [echo.bat] echo test pause [コマンドプロンプト] rem その1 cmd /K c:\temp\a\echo.bat rem その2 cmd /K C:\Temp\(a\echo.bat その1の結果 C:>cmd /K C:\Temp\a\echo.bat C:>echo test test C:>pause 続行するには何かキーを押してください . . . その2の結果 C:>cmd /K C:\Temp\(a\echo.bat 'C:\Temp\' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 C:> 上記のように1は正常に処理され2はうまく処理されません。 解決策をひたすら検索したのですが見つからず なんとなくだいたい分かったのが一部『(』や『)』や『&』や『@』や『^』などの記号が混じるとどうやらうまく処理できないようです。 なぜ処理できないのか?と、如何すればこれを回避して実行できるか分かる方がいればよろしくお願いします。 備考: (現状の緊急回避として記号のあるパスは記号のないパスから経由batを生成する方法を思いつきましたが自分で馬鹿だと思います) (経由バッチの中身が"C:\Temp\(a\echo.bat"ならば実行できるから) また、cmd /K "C:\Temp\(a\echo.bat" では実行できませんでした。 OSはXPです。コマンドプロンプトヴァージョンは(Microsoft Windows XP [Version 5.1.2600])です

  • CMD起動用BATファイルの作成依頼

    いつも起動するコマンドプロンプトが決まっている場合   CMDを起動後に同じコマンドを手動入力するのではなく自動でコマンドのみ入力して   次に必要なパラメーターを手動入力又はコピペで入力するようにしたいです。   (パラメーターのリストをテキストファイルで作成しておいてそこから必要な個所を    コピペしたい) 上記目的のために、BATファイルをデスクトップに作成したいと思います。 例えば,   C:\Users\Pon_\ZET01.exe -ght だとして BATファイルを起動するとコマンドプロンプトが起動して C:\Users\Pon_\ZET01 のところまでは自動的にタイプインされていて 後の-ghtを入力できるようにカーソールが移動して停止状態となる。 そこで、-ghtをコピペ(又は手動入力)して リターンキーを押すとCMDが実行されるような感じです。 近頃、まったくBATファイルを作成することが無く スキルが退化してしまいました。 すいませんが、希望のようなBATファイルを作成をお願いします。

  • batよりjava起動

    お世話になっております。 javaのclassを実行する 以下の処理を行うbatファイルを作成したところ (ディレクトリ移動→classpathの設定→javaコマンド) cmd.exeよりこのbatファイルを実行すると 正常に動作してくれるのですが batファイルをダブルクリックすると javaを正常に実行しません。 errorや例外も特に発生していません。 batファイルを cmd.exeからの実行するのと ダブルクリックで実行するのには 何か違いがあるのでしょうか? 最終的な目的はタスクにこのbatを登録し 指定した時間に定期的に実行する事なのですが、 タスクにbatを登録して実行した場合 batをダブルクリックした時と同様の現象になり 正常に動作しませんでした。 原因をご存知の方がいらっしゃいましたら 教えて頂けないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • Runtime.getRuntime().exec("cmd /c start run.bat");でコマンドプロンプトが出ないようにしたい

    WindowsXPにおいてJavaのプログラムから Runtime.getRuntime().exec("cmd /c start run.bat"); としてbatファイルを呼び出しています。 このようにすると、batファイルの起動はできるのですが、黒いwindowが出てしまいます。windowを出さずに同様の結果となる方法はありますか?

  • ckw.exeでバッチファイル

    バッチファイル(.cmd/.bat)を直接ckwで実行したいのですが、いい方法はありますでしょうか。 cmd/batファイル(ckwを立ち上げるコマンドは書かない)をダブルクリック→ シースルーでckwが直接立ち上がる→ そこでバッチ処理をする という感じにしたいのです。 よろしくお願いします。

  • バッチファイル(batファイル)

    あることを自動化するために、あるサイトのバッチファイルをコピー&ペーストして使おうと思っています。 (自由に使用していいと表記してあります) しかし、使用されているプログラムがいくつか入手できなかったり、バッチファイルをいくつか繋げたらら上手くいかなかったりと、 色々と問題があり、自分で改変をしています。 初めてバッチファイルの中身を触ったような初心者なので、色々と試行錯誤しているのですが、行き詰ってしまいました。 上記のように初心者なので、言葉がおかしい所があったりするかもしれませんが、 回答よろしくお願いします。 本題です。 ファイルのドロップで処理を始めたいのですが、どうやらファイル名に半角の#が含まれていると途中でエラーが出るので、 処理の一番最初でファイル名の半角#を全角#に置き換えようとしたのですが上手くいきませんでした。(ファイル名の変更) なので新たなバッチファイル、"ドロップ用.bat"を作り、そこでファイルの置き換えを行ってから、callコマンドで 本命のバッチファイルaaa.batを呼び出そうとしました。 それでもうまくいかないため、質問させていただきました。 バッチファイルは一つのフォルダーにまとめていますが、ドロップするファイルは別のフォルダーにあります。 なお、ドロップするファイルのフルパスには、空白が含まれる可能性があります。 ドロップ用.bat--------------------------- @echo off setlocal set abc=%~n1 set def=%abc:#=#% ren "%~nx1" %def%%~x1 set ghi="%~dp1%def%%~x1" set jkl=%~dp0 call "%jkl%aaa.bat" "%ghi%" rem pause endlocal exit /b ----------------------------------------- ややこしくてまわりくどいバッチファイルですみません。 Windows7を使っています。 C:\windows\system32\cmd.exeと上には書いてあります。 よろしくお願いします。

  • cmd /c rd /s /q /c:\について

    これってメモ帳にcmd /c rd /s /q /c:\を書いて、拡張子はバッチファイルで保存して それで実行したら HDDを初期化しますか?