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

1970
Ehryk

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

Я добавляю «Подключить сетевой диск здесь» к своему набору инструментов контекстного меню, таких как «Запустить Powershell Here» и «Открыть командную строку здесь». Они добавляют ключи реестра в реестр 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

0

1 ответ на вопрос

1
Rik

Я не уверен ... но ты имел в виду что-то подобное? (вам нужно использовать% 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 при щелчке правой кнопкой мыши в пустом пространстве сетевого каталога.

Смотрите здесь полный список этих переменных.

Это работает для «Командная строка здесь», так как отображает диск и открывает окно команд. В чем разница между `% 1` и`% V`? Ehryk 9 лет назад 0
@Ehryk% 1 не работает в `Directory \ Background \ Shell`;) Поскольку вы нажали ** пустой фон **, для% 1 ** нет параметра **. % V - это ** рабочий каталог **, который ** доступен ** для щелчка правой кнопкой мыши на пустом фоне каталога (по-прежнему UNC при вызове по команде). Вы можете увидеть список этих специальных переменных [здесь] (http://superuser.com/a/473602/235723). % W тоже работает. Rik 9 лет назад 0
Я добавил информацию в свой ответ. Rik 9 лет назад 0
`% V` был именно тем, что мне было нужно, и этот список переменных очень помог. Спасибо! Ehryk 9 лет назад 0