日々様々なトラブルにハマっている、困ったシステム管理者の奮闘日記です。

doskeyで無限ループに入る??

Windows のコマンドプロンプトを便利に拡張する「doskey」というコマンドがある。
コマンドラインはどうしてもUnixライクなものに慣れたボクとしては、Windowsのコマンドラインでも同じように使いたい。
というわけで、以下のようにdoskeyコマンドで定義したバッチファイルををコマンドプロンプトの実行時に事前に動かそうと、レジストリ登録することにした。

@echo off
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_33
doskey ls=dir $*
doskey vi=C:\"Program Files (x86)"\sakura\sakura.exe $*
doskey cp=copy $*
doskey pwd=cd

今回はこれでハマりました。

上記スクリプトを、メインの64ビットWindows 7マシンのユーザフォルダ直下に「doskey.cmd」という名前で保存。

次に、レジストリエディタ(regedit)で、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processorに、「AutoRun」のキー名前で文字列値を作り、そこに「F:\Users\user1\doskey.cmd」として登録。
(ユーザ名はuser1としている。)

regedit

これでコマンドプロンプトを起動すると、事前に「doskey ls=dir $*」などが登録され、Windowsでも「ls」コマンドが使えるようになった。

これに気をよくして、VMwawreで動かしている64ビットWindows7にも同じものを入れようとした。
上記の、メインマシンと同じ内容のdoskeyコマンドを、「doskey.cmd」として「c:\Users\demo」フォルダ直下に保存。
次に、レジストリエディタで、同じキー「AutoRun」に「c:\Users\demo\doskey.cmd」として登録。

さっそくコマンドプロンプトを起動すると、あらら、コマンドプロンプトウィンドウは開くがプロンプトがいつまでたっても出てこない。
一旦コマンドプロンプトを右上「×」ボタンで終了。レジストリエディタに登録した内容を一旦削除。
doskey.cmdの先頭の@echo offをコメントアウト。
再度コマンドプロンプトを起動すると、今度はプロンプトが現れた。
で、コマンドプロンプト上から「c:\Users\demo\doskey.cmd」を実行すると、見事にdoskeyコマンドが何回も実行されて無限ループ状態に入っている。

もしや、と思ってdoskeyのバッチファイル名を「c:\Users\demo\userdoskey.cmd」に変更。再度同じことを実行すると、今度はうまくいった。doskeyで定義した「ls」コマンドも使える。

で、あらためてレジストリエディタで上記キーを登録。今度は無限ループすることなくコマンドプロンプトが起動し、doskeyも正常。

Windows7の場合、環境変数「PATH」に登録されていなくても、「c:\User\ユーザ名」以下に登録されたプログラム,バッチファイルが優先して実行されるのかも。
メインマシンは、ユーザのフォルダをCドライブではなく、別のドライブ(Fドライブ)にしていたから何事もなかったのだろう。

ふぅ、解決に2時間以上かかったよ…


You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

AddThis Social Bookmark Button

Leave a Reply