cmd.exe は を使用して UNC パスで動作できますがPUSHD \\UNC\Path
、UNC パスから cmd または同様のコマンドを起動しようとしています。理由は次のとおりです。
「ここで Powershell を起動」や「ここでコマンド プロンプトを開く」などのコンテキスト メニュー ツール スイートに「ここでネットワーク ドライブをマップ」を追加しています。これにより、Windows レジストリにレジストリ キーが追加され、非常にうまく機能します。
たとえば、次のコマンドでコマンド プロンプトが開きます。
"cmd /s /k ""VER && TITLE Command Prompt: %1 && PUSHD ""%1"" "" "
(フォルダーを右クリックすると、UNC パスが機能します)
"cmd /s /k ""VER && TITLE Command Prompt: %%%CD%%%"" "
(ディレクトリの背景を右クリックする場合、UNC パスでは機能しません)
コマンドはレジストリ キー DWORD として入力され、フォルダーを右クリックすると機能します。
"net use * ""%1"" "
(フォルダーを右クリックすると、UNC パスが機能します)
"net use * ""%%%CD%%%"" "
(ディレクトリの背景を右クリックする場合、UNC パスでは機能しません)
%%%CD%%%
UNC パスでは起動しない cmd.exe によって展開されていると思われます。
私の質問は、コマンドに渡す目的でレジストリ キーで展開された UNC パスと Windows パスの両方について、右クリックした「ドライブまたはディレクトリの背景」のパスを取得するにはどうすればよいかということです。
HKCR,Directory\Shell\xxx\command
これらはそれぞれ、およびに入りますHKCR,Directory\Background\Shell\xxx\command
。
これはオープンソース プロジェクトであり、GitHub で入手できます。https://github.com/Ehryk/ContextMenuTools
答え1
よく分かりませんが、このようなことを言いたかったのでしょうか?(%1 の代わりに %V を使用する必要があります)
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\Background\shell\cmd]
@="Open cmd here"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\Directory\Background\shell\cmd\command]
@="cmd /s /k \"VER && TITLE Command Prompt: \"%V\" && PUSHD \"%V\" \""
(ちなみに、NoWorkingDirectory は、作業ディレクトリとして UNC を使用して cmd を開いたときに初期エラー メッセージが表示されないようにするためのものです。これにより、現在のディレクトリなしで cmd が起動し、その後、pushd を実行して一時的なドライブ文字を取得します)
編集: ディレクトリの空白部分をクリックしているため、%1 パラメータは入力されません (ディレクトリ自体をクリックした場合のように)。したがって、%V または %W を使用する必要があります。これらは、ネットワーク ディレクトリの空白部分を右クリックしたときの UNC パスである作業ディレクトリを表します。
見るこここれらの変数の完全なリストについては、こちらをご覧ください。