• 締切済み

バッチファイルについて

@cmd /k 上記の内容で「a.bat」というファイル名で保存しました。 この保存したファイルをダブルクリックすると、バッチファイルが格納されてるフォルダのパスがコマンドプロンプト上に表示されます。 パス表示後に、いろいろな動作(「echo~」など)を実行したいと思っているんですが、うまくいきません。 どうやら一番上の「@~」を記述したものは、そのあとに「echo~」などを記述しても実行してくれないみたいです。 「@cmd /k」実行後に何か(「echo~」など)を実行するにはどうしたらいいですか?

みんなの回答

  • Xaval
  • ベストアンサー率58% (61/105)
回答No.4

@は画面へのエコーをしないだけだったと思います。 cmdは、コマンドプロンプトの新規プロセス(スレッド?)を生成します。 つまり、xx.batを実行するためにひとつ作られますが、 cmdコマンドで、さらにもう一つ上から作られます。 最初のプロセスは、次のcmdが終了するまでスクリプトをブロック(待機)します。 ですから、表示されたコマンドプロンプトでexitとタイプすると 最初の行 @cmd /k が終了し、以降の行が実行されます。 テスト @cmd /K echo wow pause でてきたプロンプトでexitしてください。 wow がエコーされるはずです。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★パスを表示したいのならば環境変数を参照します。 ・つまり『ECHO %CD%』とするとバッチファイルがあるパス名を『ECHO』が表示してくれますよ。 ・その後の『ECHO』コマンドもそのまま処理されいます。 ・なお、環境変数『CD』は『SET』コマンドでは見れませんが、定義済みの環境変数という事です。  つまり、常に現在のカレントディレクトリのフルパス名が格納されているのです。  バッチファイルの起動時は、バッチファイルがあるフォルダのフルパス名が格納されています。 ・以上。おわり。 サンプル: @ECHO OFF ECHO 現在のパスは %CD% です。 ECHO 続きの処理です。  : ECHO 最後の処理です。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

えっと、何をされたいのかいまいちよくわかりません。 cmd /K というオプションは、本来は/Kのあとにコマンドを指定して使います。これを実行するとそのコマンドを「新しいコマンドプロンプトで」子プロセルとして実行し、その終了を待ちます。その終了を待つとは、呼び出されたコマンド側で明示的にexitされるまで待つ、ということです。 以上を踏まえて、 @cmd /K echo AAA とするとどうなるかと言うと、 @cmd /K でコマンドが指定されてないので、そのままCMD.EXEを子プロセスとして起動し、その実行結果を待ちます。 この状態が、質問文に書かれている > バッチファイルが格納されてるフォルダのパスがコマンドプロンプト上に表示されます。 の状態です。これはあくまでもバッチの中から呼び出されたCMD.EXEです。この状態でexitと入力すると、a.batの続きの処理(上の例ではecho文)が実行されます。 それで疑問なのですが、最初にcmd /kを行う必要性がわかりません。何をやりたくでこの1行を入れているのでしょうか。 パスを表示したいだけであれば、 @echo off cd echo AAA でできると思いますが。 やりたいことを補足していただければ、もう少し適切なアドバイスができるかもしれません。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

cmd.exe の /Kオプションはcmd.exeを新たに起動して、そのまま常駐するという 意味ですから、常駐してしまった時点でバッチファイのその先を 見なくなってるんじゃないですか? 自分が置かれているディレクトリを表示するバッチファイルなら cd だけでいいと思うんですが。 (コマンドラインを出したくないのなら@cdで)

関連するQ&A