みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

WindowsでPATHにあるコマンドを補完?

お世話になります。
Windowsのコマンドラインプロンプトでは、ある程度タイプして[TAB}キーを押下すると、カレントディレクトリにあるファイル名を補完してくれます。
たとえば xxxxYYY というファイルがあるディレクトリにおいて

 C:\foo\> x[TAB]

のようにタイプすると、xxxxYYYと補完されます。

LinuxやMacを含むUNIX系のコマンドライン環境では、カレントディレクトリだけでなく、PATHに入っているコマンドも補完してくれます。具体的に言うと、C:\myProgram\bin\xxxxYYY.exeというコマンドを、C:\fooという全然違うカレントディレクトリにあっても、

 C:\foo\> x[TAB]

で補完してくれます。

この、PATHにあるコマンド名の補完は、Windowsでも可能でしょうが。
具体的には、何らかのフリーウェアを常駐させる、レジストリを書き換えるなどによって、可能になるでしょうか。
私は20年以上DOS/Windowsを使い込んでいるのですが、この機能さえあれば本当に助かります。

Linuxを使え、WindowsでCygwinを使えというのはナシで、あくまでWindowsのcmdを使い続けるという前提でお願いします。
よろしくお願いいたします。

投稿日時 - 2011-06-05 08:16:54

QNo.6787263

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

*補足です*

PerlのスクリプトはWindowsでは「コマンド」として認識できないのでPATH変数による補完はされないと思います。
Cygwinでもできない気がします。

PS上でCMD.exeを実行すると別プログラムを起動することになりますので呼ばれた側で一時停止なりをしなければそのままプログラムが終了してしまいます。

システム管理上はレジストリ操作などができて色々便利なのですが、bashなどのシェルとして扱おうとすると考え方の違いにかなり戸惑うと思います。

投稿日時 - 2011-06-06 00:51:26

補足

Windowsで動くzsh、bashっていうのがありますね。
ぼくはzshが好きなのでこれもいいですね。
Cygwinはちょっと大げさなのでこれが使えればいいかも。
http://d.hatena.ne.jp/griefworker/20100201/windows_zsh_bash

でもDOS窓が拡張されると一番いいな。
DOSのコマンドも使いこなせるようになりたいので・・・。

投稿日時 - 2011-06-07 12:55:55

お礼

ありがとうございます。
いま、ひさびさにCygwinを入れて確認しましたが、CygwinであればPATHにあるファイルを補完してくれるようですね。
特に「コマンド」として認識する必要はなく、PATHにあるファイルであればなんでも補完してくれるようです。
コマンドでないファイルも補完してくれて、そのまま起動するとエラーになるようです。
よくも悪くも自己責任のUNIX流ですね。(^^)

PSはものすごくパワフルなようですが、CMD/bashとはまた違うベツモノですね。
機会があれば覚えるんでしょうが、まだまだ先ですね・・・。

投稿日時 - 2011-06-07 00:48:30

ANo.3

CMDではありませんが…

WindowsPowerShell はいかがですか?
http://ja.wikipedia.org/wiki/Windows_PowerShell

XP以降で使用可能ですが、Windows7では標準搭載されています。

投稿日時 - 2011-06-05 22:49:39

お礼

ご回答ありがとうございます。
PowerShellはオブジェクト指向の画期的なシェル環境ということで、昔はいろいろ本も出ていて、勉強しかけたのですが、複雑すぎて挫折してしまいました。
しかし、7で標準搭載されたということは、cmdが置き換わらないとも限らないので、改めて勉強しようと思います。

さて、PowerShellの補完機能では、確かに今までとは比べ物にならないいろいろなプログラムが補完出来たのですが、PATHに置いた自作のPerlスクリプトは補完してもらえませんでした。

また、cmdで標準出力にメッセージを出力するプログラムを実行すると、cmdウィンドウ(DOS窓)が一瞬開いて内容が表示されてすぐ消えてしまうので、私の用途には使えないと分かりました。

(何らかのPowerShell独自のオブジェクト指向コマンドを使えば出来るのかもしれませんが、そこまで調べが行き届きませんでした。)

引き続き、PATH配下のコマンド補完についてどなたか何か分かりましたら、ご教示くださるようお願いいたします。

ご回答をくださったみなさんありがとうございました。

投稿日時 - 2011-06-05 23:50:39

ANo.2

ファイル名やディレクトリ名の補完は下記の記事が参考になると思います。
 http://www.atmarkit.co.jp/fwin2k/win2ktips/072cmdcompletion/cmdprompt.html

なお上記の方法でパスにあるコマンドの補完はできませんでした。

投稿日時 - 2011-06-05 16:01:03

お礼

ご回答ありがとうございます。
cmdの補完は昔は /F:ONをわざわざ指定する必要があったようですが、現状はこれがデフォルトになりましたね。
わざわざ試していただき、ありがとうございます。

投稿日時 - 2011-06-05 23:46:10

ANo.1

コマンドプロンプト CMD.EXE にはそういう機能はありません。CMD.EXEを置き換えるようなソフトを探すくらいしかないと思います。

補完より知られていないコマンドプロンプトの機能で、シェルでいうaliasにあたるものがありますので、それを活用するのも手かと。わたしはそうしてます。

e=notepad.exe $*
ls=dir /w /a $*
h=doskey /history $*

のような定義ファイルを作っておき、コマンドプロンプトの起動ショートカットを
%SystemRoot%\system32\cmd.exe /k doskey /macrofile=定義ファイル名

のように修正します。あるいは、cmd /? を参照して下記のレジストリにdoskeyコマンドを書いておけばどのようにCMD.EXEを起動しても有効になります。

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun
or
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun

投稿日時 - 2011-06-05 09:03:57

お礼

ありがとうございます。
これもなかなか便利ですね~。

さて、私の目的は、特定の場所に置いたPerlのスクリプトを実行する時にタイプを早くしたいと言うものでした。

PATH配下にある実行可能形式のタブ補完はUNIX系では一般的なものであり、かつ明らかに便利なので、何らかの方法で実装していればと思い、質問させていただきました。
いずれにせよ、ありがとうございます。

投稿日時 - 2011-06-05 23:44:53

あなたにオススメの質問