« @homepage終了のお知らせ | トップページ | @homepageから@niftyホームページサービスミニへ移行 »

2016年3月 1日 (火)

Windows10でフォルダを右クリックしてそのフォルダでコマンドプロンプトを起動する

コマンドプロンプトの立ち上げはユーザ権限と管理者権限のどちらも可能とする。

やろうと思ったきっかけはDOS窓(コマンドプロンプト)を管理者権限で立ち上げると”C:\WINDOWS\system32>”で必ず起動するため、いちいち目的のフォルダまで移動するのが手間だったから。

1.administratorを有効にする。

コマンドプロンプトを管理者権限で立ち上げ

net user administrator /active:yes

とコマンドを打ち込み実行する。
次に

net user administrator *

を実行するとパスワードを聞いてくるので設定する。

2.フォルダの右クリックメニューにコマンドプロンプトを登録する。

レジストリエディタで色々やらないといけないのだが面倒なのでレジストリファイルに書き出したのを掲載。
コピー&ペーストでファイルに保存し、拡張子をregに変えて実行するとレジストリファイルに登録される。

・ユーザ権限で立ち上げ
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\folder\shell\cmd]
@="コマンドプロンプト"

[HKEY_CLASSES_ROOT\folder\shell\cmd\command]
@="cmd.exe /k \"cd %l\""


・管理者権限で立ち上げ
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\folder\shell\cmd_adm]
@="コマンドプロンプト(管理者)"

[HKEY_CLASSES_ROOT\folder\shell\cmd_adm\command]
@="runas /savecred /user:administrator \"cmd /k cd %1\""


簡単な解説

[HKEY_CLASSES_ROOT\folder\shell\cmd]

"HKEY_CLASSES_ROOT\folder\shell\"配下に"cmd"という名前でキーを作成している。
キー名は"HKEY_CLASSES_ROOT\folder\shell\"配下の他のキー名と重複していなければなんでもよい。
今回は"cmd"と"cmd_adm"としている。

@="コマンドプロンプト"

これは右クリックメニューに表示する名前を設定している。
これも自分で分かる様な名前であればなんでもよい。

ユーザ権限での立ち上げは @="コマンドプロンプト"
管理者権限での立ち上げは @="コマンドプロンプト(管理者)"
と設定している。


[HKEY_CLASSES_ROOT\folder\shell\cmd\command]

"HKEY_CLASSES_ROOT\folder\shell\cmd\"配下に"command"という名前でキーを作成している。
キー名は分かれば何でもよい。

@="cmd.exe /k \"cd %l\""
cmd.exeを立ち上げて右クリックしたフォルダに移動している。
/kはcmd.exeを終了しないように指定。

@="runas /savecred /user:administrator \"cmd /k cd %1\""
runasコマンドでcmd.exeを管理者権限で起動。
最初の一回だけパスワードを聞いてくるが、2回目以降はそのままコマンドプロンプトが立ち上がる。

ちなみにユーザ権限と管理者権限でのcmd.exeに対する引数が違うが、%lでも%1でも同じ動きをするようだ。

2016/03/14追記:
上記設定ではCドライブ以外うまくいっていなかった。
C以外のドライブへ切り替えができないようだ。

というわけでcmd.exeに直接コマンドを渡して起動するのはダメだということが分かったので、cmd.exeでバッチファイルを呼び出す形に変更をした。

バッチファイルの場所:C:\cmd_bat
ファイル名:cmd_cd.bat
バッチファイルの内容

echo off
set bl=
set cdcd=%1%bl%%2%bl%%3%bl%%4%bl%%5%bl%%6%bl%%7
cd %cdcd%
%~d1
echo on
cls


・簡単な説明
%1に変更先のドライブとフォルダパスが入っている。
フォルダ名に空白が含まれていると空白部分で名前が分割されて%2以降に入ってくる。

set bl= のところで半角スペースを代入、set cdcd= 以降で分割された名前を結合している。
分割されていない場合は単にフォルダ名の後ろに半角スペースが追加されるだけなので動作上の問題ない。

例:D:\tmpフォルダの上でマウスを右クリックして呼び出した場合
%1=D:\tmp

”%~d1”は変数からドライブ名を切り出している。
例の場合だと”D:”となる。

動作としては
1.echoをoffにして画面に実行コマンドを表示しない様にする
2.SETコマンドで空白を含むフォルダ名の場合の対策をしている
3.cdコマンドで目的ドライブのフォルダを切り替える
4.Cドライブから目的のドライブへ移動
5.echoをonにして実行コマンドを表示できるようにする
6.DOSプロンプト画面をクリアする

となる。
まあ、この辺の処理は一瞬で終わるので気にはならないだろう。


ついでにこの修正でレジストリの設定も以下の様に変更した。

・一般権限で呼出し
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\folder\shell\cmd\command]
@="cmd /k \"C:\\cmd_bat\\cmd_cd.bat %1\""

・管理者権限で呼出し
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\folder\shell\cmd_adm\command]
@="runas /savecred /user:administrator \"cmd /k C:\\cmd_bat\\cmd_cd.bat %1\""


とりあえずこれで一応の目的は達成できたので良しとする。

|

« @homepage終了のお知らせ | トップページ | @homepageから@niftyホームページサービスミニへ移行 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/99274/63279964

この記事へのトラックバック一覧です: Windows10でフォルダを右クリックしてそのフォルダでコマンドプロンプトを起動する:

« @homepage終了のお知らせ | トップページ | @homepageから@niftyホームページサービスミニへ移行 »