Как запустить cmd.exe из UNC-пути (для подключения сетевого диска)?

Как запустить cmd.exe из UNC-пути (для подключения сетевого диска)?

Хотя cmd.exe может работать с путями UNC с помощью PUSHD \\UNC\Path, я пытаюсь запустить cmd или подобную команду ИЗ пути UNC. Вот почему:

Я добавляю "Подключить сетевой диск здесь" в свой набор инструментов контекстного меню, таких как "Запустить 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%%%что его расширяет cmd.exe, который не запускается по UNC-пути.

У меня такой вопрос: как мне получить путь к щелкнутому правой кнопкой мыши «фону диска или каталога» для путей UNC и Windows, расширенному в разделе реестра, чтобы передать его команде?

Они будут помещены в HKCR,Directory\Shell\xxx\commandи HKCR,Directory\Background\Shell\xxx\command, соответственно.

Это проект с открытым исходным кодом, доступный на GitHub:https://github.com/Ehryk/ContextMenuTools

решение1

Я не уверен... но вы имели в виду что-то вроде этого?(вам нужно использовать %V вместо %1)

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 нужен для того, чтобы вы не получили начальное сообщение об ошибке при открытии cmd с UNC в качестве рабочего каталога. Это запускает cmd без текущего каталога, после чего вы выполняете pushd, чтобы получить временную букву диска)

Редактировать: Поскольку вы щелкаете по пустому месту в каталоге, параметр %1 не заполняется (как если бы вы щелкали по самому каталогу). Поэтому вам нужно использовать %V или %W. Они обозначают рабочий каталог, который является путем UNC при щелчке правой кнопкой мыши по пустому месту в сетевом каталоге.

Видетьздесьдля полного списка этих переменных.

Связанный контент