Windowsコマンドプロンプトの小ネタ・その1

WindowsGUIが基本ですが、単調な繰り返し作業や定型作業ではコマンドプロンプトを使う方がずーっとラクな場合もあります。それに、けっこう便利なコマンドとかあるんですが、あまり知られてなかったりするようです。
わたしのまわりではこの傾向が顕著でしたので、ちょこっとだけメモしておきます。今回は基本的なものばかりです*1
OSはWindows XP (SP2) を前提にしてますが、Windows 2000以降であれば大丈夫だと思います。ただし、どっちにしろコマンド拡張機能が有効になってないとうまくいかないものもあります。

ヘルプを読もう

RTFMです。けっこういろいろあります。

  • Windowsのヘルプにあります。hh "%windir%\Help\ntcmds.chm"コマンドラインリファレンスが表示されます*2
  • コマンドプロンプトhelpを実行すると、コマンド一覧が表示されます。正確には「一覧」じゃなかったりするんですが、そのへんはご愛敬。
  • たいていのコマンドには "/?" パラメータが用意されています。例えばdir /?を実行すると、dirコマンドのヘルプが表示されます。

何もしないコマンド

remは「何もしないコマンド」です。コメントではないので、 "/?" をコメントアウトしようとしてrem /?とするとremコマンドのヘルプが表示されてしまうので注意。

エクスプローラからファイルをドラッグアンドドロップ

エクスプローラからファイルをドラッグアンドドロップすることで、そのファイル名を入力できます。

conとnul

conはキーボードやコンソールを表すファイルっぽいもので、nulは空っぽのファイルっぽいものです。

C:\> rem キーボードから入力した内容をinput.txtに保存する
C:\> rem "^Z" は [Ctrl] + [Z] キーを押すことを表す

C:\> copy con input.txt
abc
def
^Z
        1 個のファイルをコピーしました。

C:\> type input.txt
abc
def

C:\> rem 大きさが0バイトのempty.docファイルを作成する

C:\> copy nul empty.doc
        1 個のファイルをコピーしました。

C:\> dir empty.doc
2006/03/26 (日)  23:28                 0 empty.doc
               1 個のファイル                   0 バイト
               0 個のディレクトリ   1,234,567,890 バイトの空き領域

C:\> 

特にnulはリダイレクト演算子とともに使うと便利です。

リダイレクト演算子

Windows NTあたりからリダイレクト演算子が強化されてて、Unix系OSのBシェルっぽいことができるようになってます。

C:\> rem エラーメッセージを表示させずにinput.txtとempty.docを消す

C:\> del input.txt empty.doc /f >nul 2>&1

C:\> 

エスケープ文字

コマンドプロンプトにおけるエスケープ文字は '^' です。

C:\> rem 環境変数特殊文字を含める

C:\> set SPECIAL_CHARS=^&

C:\> set SPECIAL_CHARS
SPECIAL_CHARS=&

C:\> rem コマンドを複数行に分ける

C:\> if "%OS%"=="Windows_NT" setlocal ^
More? enableextensions enabledelayedexpansion

C:\> 

プロンプトの変更

ふつう、プロンプトは "ドライブ:\パス>" のようになってますが、promptコマンドで変更できます。

C:\> rem プロンプトを "ユーザ名@コンピュータ名 ドライブ:\パス$" のように変更する
C:\> rem $Pや$$などの使用できる特殊コードは "prompt /?" でわかる

C:\> prompt %USERNAME%@%COMPUTERNAME%$S$P$$

mitamu@hatena C:\$ rem 元に戻す

mitamu@hatena C:\$ prompt $P$G

C:\> 

プロンプトは環境変数PROMPTでも設定できるので、システムのプロパティなどで設定しておくと便利です。

pushdとpopd

cdコマンドだけでなく、pushdコマンドやpopdコマンドもあります。dirsコマンドはありませんが、プロンプトを$P$+$Gのように変更するとディレクトリスタックの深さを表示できます。

C:\> prompt $P$+$G

C:\> pushd \Documents and Settings\mitamu

C:\Documents and Settings\mitamu+> pushd \WINDOWS\Temp

C:\WINDOWS\Temp++> popd

C:\Documents and Settings\mitamu+> popd

C:\> 

ネットワークパスを指定すると、自動的にドライブ文字を割り当ててくれます。このドライブ文字は一時的なものであり、Z:から降順に割り当てられます。
ちなみに、わたしはドライブ文字をこんなふうに割り当ててました(今は違いますよ)。

  • ローカルドライブ: A: - I:
  • ネットワークドライブ: J: - Q:
  • 一時的な割り当て: R: - Z:

アメリカ、ジャパン、ロシア」だとわかる人はなかなかの通ですね。

ドライブとパスをいっぺんに変更

cd /d ドライブ:\パスを実行すると、ドライブとパスをいっぺんに変更できます。

C:\> rem ドライブとパスをばらばらに変更する

C:\> d:

D:\> cd temp

D:\temp> rem ドライブとパスをいっぺんに変更する

D:\temp> cd /d "C:\Documents and Settings\mitamu\My Documents"

C:\Documents and Settings\mitamu\My Documents> 

何でもstartから

startコマンドにファイル名を指定することで、そのファイルに関連付けられたプログラムで開くことができます。特に、start .で現在のディレクトリをエクスプローラで開くことができるので、何かと便利です。

Goodbye, Admin

別のユーザでコマンドを実行するにはrunasコマンドを使います。管理者権限でログインする必要がなくなります*3
ショートカットを右クリックして [別のユーザーとして実行(A)...] するのとだいたい同じ*4なので、あまり使わないかもしれませんが。

しっかりデフラグ

デフラグは、1回だけ実行しても完全に最適化できないことが多々あります。しかもかなり時間がかかったりするので、複数回続けて実行したい場合はPCの前でじーっと待ってなくてはなりません。こんな時こそコマンドプロンプトを使いましょう。

C:\> rem 5回続けてC:ドライブのデフラグを実行する

C:\> for /l %I in (1,1,5) do defrag C: -f

あとはティータイムなりお買い物なりご自由に。ただし、職場など不特定多数の人に操作される可能性がある場合は、PCをロックしておくのをお忘れなく。

*1:でも「その2」以降があるかはわかりません。ネタはいくつかありますが。

*2:環境によってはうまくいかない場合があるので、「ヘルプとサポートセンター」から「コマンドラインリファレンス」で検索したりしてみてください。

*3:「イベントビューアを見る」などのちょっとした操作であればかまいませんが、システムを変更する操作(アプリケーションの追加や修正プログラムの適用など)であれば素直に管理者権限でログインし直すのが賢明です。

*4:厳密には両者は異なるのですが、めんどくさいので違いの説明は省略。まぁ、「よく知らない」とも言いますが。