高見知英のかいはつにっし(β)

高見知英のアプリケーション開発日誌 のほか、地域活動などの活動報告ブログ。

コンソールアプリを名前を指定して実行する

たとえばipconfigなどのコンソールアプリは、普通に「名前を指定して実行」などから起動しても、実行終了時にコマンドプロンプトが閉じてしまうので動作を確認することができません。面倒でも一度コマンドプロンプトを起動し、コンソールアプリを実行しないといけません。
しかし、ちょっと工夫すると、コンソールアプリの終了後にポーズがかかり、しっかり表示を確認できます。会社で見つけて結構便利に使ってました。

cmd /C ipconfig & pause

こんな感じでコマンドプロンプトにオプション/Cを付けて起動し、目的のコマンドの後にpauseコマンドを&でくっつけます。すると、コマンドを実行後に「続行するには何かキーを押してください」と表示されるので、じっくり表示を確認できるというわけ。
とりあえず、Windows2000Windows Vista Ultimateで確認しました。


ついでに、以下のようなバッチファイルを作って、Windowsフォルダなどにでも放り込んでおけば、いちいちpauseをくっつけたりしなくても、コンソールアプリを「名前を指定して実行」から起動できます。

cmd /C %* & pause

こうやってちまちまとコマンドプロンプトを拡張していくの、最近ちょっと気に入っていて、SETコマンドの機能を使ったevalコマンドなんかを作ったりして遊んでいたりします。

@echo off
SET /A a=%*
echo %a%
pause

これ、実は16進数や8進数を記入しても10進数で表示してくれるので、なかなか便利です。たとえば「eval 0x0010」と入力すると「16」と帰ってきます。仕事柄基数変換だけはちょくちょくやるので結構助かってます。

――まあ、世間はPowershellだの新しいものに移行しつつあるとは思いますが、会社などだとなかなか自分の好きなものを入れられないこともありますから*1
こうやってちまちま自分流カスタマイズを施すというのは、ちょっと楽しいですね。


ちなみに、%*として残りの引数全てを取得する記法や、SETコマンドの/Aオプションでの簡単な演算機能はWindows XPから導入されたものだそうです。
2008/04/23追記;WindowsNTからあったそうですね。じゃくさん情報ありがとうございます。

*1:といってもわたしが別にPowershell好きって訳じゃないですが。バッチファイルやその他スクリプト言語に慣れた今になっては、今更Powershellに移行したいという気にはなりませんねえ。他の人の環境と違うものを常用してるとソースの配布などにも支障が出るおそれがありますし