ホーム ざれごと ワシントン州 ツール NT豆知識 Win32プログラミングノート 私的用語 ジョーク いろいろ ゲーム雑記 Favorites 掲示板 Mail
はじめに |
NTのコマンドプロンプトをちょっと便利にするテクニックをご紹介しましょう。 …と、その前に。コマンドプロンプトを頻繁に使うのなら、まずここをチェックしてください。間違って大事なファイルを失ってしまう前に。 さて気を取り直して。 NTでは、UNIXのkshなどに比べてコマンドプロンプトがお馬鹿さんなので困りもの。 CygnusのGNUポートの中にあるbashが便利そうなんだけど、 たまにお亡くなりになることがあってちょっと不幸。 というわけで、cmd.exeとコマンドプロンプトのちょっと便利な使い方をまとめてみます。
| |||||||||||||||||||||
基本コントロールパネルでの設定 |
コマンドプロンプトのプロパティは、コントロールパネルの「コンソール」アプレットから設定します。 個々のコマンドプロンプトからシステムメニュー→プロパティでもいいんだけど、コントロールパネルから設定すると、全ての コマンドプロンプトで設定が有効になります。 まずぜひとも設定したいのが、「簡易編集モード」と「挿入モード」。
「簡易編集モード」にしておくと、マウスの左ボタンで領域選択、右ボタンでクリップボードへコピー、という技が使えるようになります。
選択していない状態で右ボタンをクリックすると、クリップボードの内容をコマンドラインに挿入します。
余談ですが、NT5.0からは、ダブルクリックで空白に挟まれた単語を選択することが出来るようになります。 次に、仮想スクリーンバッファを大きくしておきましょう。こうしておけば、ずりずりとスクロールアップされた過去の出力を、スクロールバーをぐりぐりして参照することが出来ます。 単なるcatやtypeでless代わりにもなります。 残念なことに、16ビットなコマンドを起動するとバッファがクリアされてしまうようですが。
| |||||||||||||||||||||
インテリマウスの効用 |
余談ですが、「インテリマウス」という、ローラー付きのマウスを使うと、コマンドプロンプトでローラーを回してバックスクロールが出来るようになります。
| |||||||||||||||||||||
GUIコマンドの起動 start /wで起動すると、終了を待ちます |
それから、(これは皆さんよくご存知だと思いますけど念のため)コマンドラインから直接、GUIなアプリケーションを起動できます。
以前はstartコマンドを使わなければできませんでしたが、今は直接起動が可能です。
C:> hogehoge.html
と、コマンドではないファイルを、拡張子まで指定してやると、拡張子に「関連付け」されたコマンドを起動し、指定したファイル名を引数として渡してくれます。
コマンドラインから直接GUIアプリケーションを起動すると、割とすぐに制御がコマンドラインに戻ってきますが、バッチファイルから起動するとそのアプリの終了を待ってしまいます。これは仕様でしょう。で、 GUIアプ リの終了を待たずにバッチ処理を先へ進めたい場合は、startコマンドを明示的に指定すればOKです。 なお、startコマンドには予想を上回るいろいろなオプションがあります。一度 start /?でヘルプを見てみると面白いでしょう。
| |||||||||||||||||||||
デフォルトの状態では、3文字を越える拡張子がcmd.exeで正しく扱われません。 例えば、
によって、*.htm だけではなく *.html まで削除されてしまいます。
この問題は、NTFSでも発生します。
かく言う私も、やられてしまいました。 これを防ぐために、以下のレジストリを0に設定しなければなりません。
デフォルトの値は1です。これを、0に変更します。変更した後は、念のためリブートしてください。 ただし、*.htm と *.html の区別がなされるのは、このレジストリを変更した後に作成・変更されたファイルに限られます。レジストリ変更前に作成されたファイルに関しては、依然 *.htm と *. html の区別がなされません。重々注意をお願いします。 Windows 2000用: ntfs-no-trunc.reg なお、レジストリの変更は、くれぐれも個人の責任において行ってください。
<補足> 実際にDELコマンドを発行する前に、DIRコマンドでどのファイルがワイルドカードにマッチングするか確かめておくのが、お・と・な、というものです(笑)。
| ||||||||||||||||||||||
ファイルの関連付け |
ファイルの拡張子とアプリケーションの関連付けはExplorerでも出来ますが、コマンドラインからも参照・変更することができます。 例えば、次のコマンドを叩いてみてください。 C:> assoc .html 次のように表示されることでしょう。 .html=NetscapeMarkup これは、"*.html"というファイルが"NetscapeMarkup"というファイルタイプに関連付けされていることを示します。 そいでは、今度は"NetscapeMarkup"というファイルタイプにどのアプリケーションが関連付けられているか、調べてみましょう。
ということで、無事 "*.html" が Netscape Navigatorに関連付けられていることが分かりました。 コマンドプロンプトから、これらを変更する場合にも、assoc コマンドと ftype コマンドを使います。
で、"*.html" が Internet Explorer に関連付けられます(と思います、IEがインストールされていれば)。 関連付けを消したいときには、
でOKです。 拡張子とファイルタイプの関連付けは、
と引数を付けずに assoc を起動すると一覧表示されます。ファイルタイプの方も同様です。
| |||||||||||||||||||||
拡張子の省略 |
また、PATHEXT という環境変数を設定しておくことで、.com、.exe、.cmd、.batの他にも実行形式の拡張子を指定することが出来ます。 set PATHEXT=.pl;%PATHEXT% これで、perlのスクリプトをバッチファイル代わりに使うことが出来ます。 あ、assoc と ftype の登録も忘れずにね。ftype /?のヘルプを見てください。
| |||||||||||||||||||||
環境変数の設定 |
環境変数は、コントロールパネル→システム→環境で設定しておくと、全てのプロセスについて設定できるので、ちょっと幸せです。
| |||||||||||||||||||||
特殊キー |
NT4.0のコマンドプロンプトで使える、主な特殊キーを表にしてみました。
特殊キー関係では、まぁ便利なのはこのあたりでしょう。他のファンクションキーにも機能が割り当てられているけど、
あまり役立ちそうにありません。:-P
これらのキーが、Ctrl+アルファベットなキーにリアサインできれば、cmd.exeにも我慢できるようになると思うんですけど…。
| |||||||||||||||||||||
ディレクトリ
|
さて、ヒストリは良いとして、まだディレクトリの移動が面倒です。
UNIXのシェルなら、環境変数CDPATHが使えるしワイルドカードも使えるんですが。
しかも、NTではカレントディレクトリはプロセス毎に持っているため、DOS時代のように拡張CDコマンドを作って対処するわけにもいきません。
cd /d e:\use*\hiro*\ww*なんて入力すれば、e:\users\hirofumi\wwwに飛んでいってくれます。/dは、ドライブの移動も行うスイッチです。 どうせなら、パスの区切りが"/"でも受け付けてくれるといいのに。でもUNIXのシェルに比べてちょっとお馬鹿さんで、与えられたパスを分解して、そのレベルでマッチしたディレクトリを見に行くため、 複数の候補が途中にある場合に迷子になって泣き言を言ってくるようです。 もうちょっと賢くなってくれ>cmd.exe
| |||||||||||||||||||||
そいで、pushdやpopdも実はcmd.exeに追加されています。 でも、 dirsコマンドがないのはなぜなんだ〜その後の調査で、引数を付けない"pushd"がdirsに相当するということが判明しました。 逆にいうと、カレントディレクトリをプッシュしたいときは、"pushd ." と "." を引数に付ける必要がある、ということですね。 その他、コマンド拡張機能とかいうオプションがcmd.exeに追加されていて(/x)、 昔ながらの組み込みコマンドが若干機能拡張されるようです。 詳しくは、cmd /?で調べてみてください。デフォルトの状態では、拡張機能が有効になっています。
| ||||||||||||||||||||||
UNCに対するpushd, popd |
また、pushd, popdをつかうと、ネットワークの先にあるリモートのシェア(公開しているディレクトリ)をアクセスするのが便利になります。
例えば、fooというマシンのbarというシェアにアクセスするには、UNCの形式でパスを記述する必要があります。
| |||||||||||||||||||||
バッチコマンド |
バッチコマンドは、それはそれはめちゃめちゃに拡張されています。代表的な例は、forコマンドやらifコマンドです。
そのうち書くので待っててね。
待ちきれない人は、
などとと叩いてみましょう。特にforコマンドではとんでもなく長いヘルプが表示されますから、スクリーンバッファは多めにしておきましょう(笑)。 ま、それでもUNIXのshellと周辺コマンドの充実ぶりとセンスのよさには足元も及びませんけどね。:-P 出発点(MS-DOSのcommand.comとOS/2のcmd)が悪すぎたんですなぁ。合掌。
| |||||||||||||||||||||
リダイレクト… |
標準出力のリダイレクトは ">file" ですが、標準エラー出力のリダイレクトは "2>file" でおっけーです。
| |||||||||||||||||||||
&& と || |
UNIXシェルの真似ッコといえば、コマンドラインでもバッチファイルでも有効なんですが、"&&" ってのがあります。 コマンド行でセパレータとして使えますが(要するにマルチステートメント)、コマンドの実行結果が真であったときに以下を実行ということになってます。 copy aa.txt bb.txt >nul && echo succeeded. AND じゃなくて、OR には、 "||" が使えます。perl に慣れていれば、直感的に理解できるでしょ? copy cc.txt dd.txt > nul || echo failed.
| |||||||||||||||||||||
if |
if 文に else 節を付けることができ、さらに複数行に渡る if 文が記述できます。 if "%fname%" equ "" ( echo file name is empty ) else ( echo file name is %fname% pause OK to delete? ) 比較には、以下の書式が追加されています。 IF [/I] string1 compare-op string2 command IF CMDEXTVERSION number command IF DEFINED variable command
/I を付けると、大文字・小文字を区別しない比較になります。どの書式でも、上記の複数行の if 文が書けます。
| |||||||||||||||||||||
コードページ |
英語版のツールを使うとき、コンソールも英語環境になると嬉しいですね。 日本語のままでは、罫線が化けたりすることがあります。
NT 4.0Jのコンソールウィンドウでは、日本語と英語の環境を切り替えて使うことができます。
切り替えに使うコマンドは、chcpです。
英語モードにするには、
デスクトップなどにショートカットを作っておけば、ショートカットのプロパティで起動時のコードページを選択できます。
Note: 日本語のコードページは932、USのコードページは437です。 正確には、日本語WindowsのOEMCPとACP(ANSI CodePage)はともに932、英語版WindowsのACPは1252でOEMCPが437です。
|
|||||||||||||||||||||
ファイル名のドラッグ&ドロップ |
エクスプローラからコンソールウィンドウへファイルをドラッグ&ドロップすると、そのファイルのフルパス名がコマンドラインへ挿入されます。 あんまり知られていないような気がするので、念のため。
|
|||||||||||||||||||||
ファイル名補完 |
さて、最後にファイル名コンプリージョン。これもUNIXのシェルと違って結構融通が効きませんが、まぁないよりはましでしょう。 で、次のレジストリを設定する必要があります。 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionCharこれに、DWORDでキーコードを与えます。例えば、タブキー(Ctrl+I)なら、0x09です。 Ctrl+Oなら、0x0fです。 あとは、引数を一つずつ消していってくれるキーがあれば便利なのになぁ
|
|||||||||||||||||||||
Disclaimer |
あ、もしかして誤解されるとナニなんで念のため。 ここで取り上げた機能の大部分は、NT 4.0からサポートされた機能かもしれません。 NT3.51でどうなっているかは未確認です。 |