42

При расширении контекстного меню оболочки Windows (например, для добавления приглашения «Открыть команду здесь» в каталогах) в реестре необходимо создать ключ «команда».

Значение этого «командного» ключа, очевидно, может быть любой допустимой командной строкой.

Я хочу знать, какие «специальные переменные» доступны для использования внутри этой командной строки.

Например, я использую следующую команду для открытия окна cmd из контекстного меню каталога (*):

cmd.exe /e:on /f:on /s /k pushd "%V"

Я не могу найти ссылку на то, что на самом деле означает% V или каков полный список таких переменных.


(*) Для этого создаются следующие разделы реестра:[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\cmdshell] @ = Открыть командную строку здесь "

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\cmdshell\command] @ = "cmd.exe /e: включено /f: включено /s /k pushd \"% V \""

4 ответа4

50

Комментарий Криса Гузака к статье MSDN « Расширяющиеся контекстные меню» перечисляет различные "переменные командной строки", которые доступны:

% * - заменить со всеми параметрами.

% ~ - Заменить на все параметры, начиная с и после второго параметра.

% 0 или% 1 - первый параметр файла. Например, «C:\Users\Eric\Desktop\New Text Document.txt». Обычно это должно быть в кавычках, а синтаксический анализ командной строки приложений должен принимать кавычки для устранения неоднозначности файлов с пробелами в имени и различными параметрами командной строки (это лучший метод безопасности, и я полагаю, упомянутый в MSDN).

% <n> (где <n> - 2-9) - заменить на n- й параметр.

% s - Показать команду.

% h - значение горячей клавиши.

% i - IDList, хранящийся в дескрипторе разделяемой памяти, передается сюда.

% l - Форма длинного имени файла первого параметра. Обратите внимание, что приложениям Win32/64 будет передано длинное имя файла, а приложениям Win16 - короткое имя файла. Указание% l является предпочтительным, поскольку позволяет избежать необходимости проверять тип приложения.

% d - Абсолютное имя рабочего стола для первого параметра (для элементов, которые не имеют путей к файловой системе).

% v - Для глаголов, которые не означают все. Если не передан ни один параметр, это рабочий каталог.

% w - рабочий каталог.

Поэтому% L или% l должны быть предпочтительными.

Также см. Http://www.robvanderwoude.com/ntstart.php

10

Этот вопрос заинтриговал меня, поэтому я немного поэкспериментировал. У меня есть папка C:\iso . Что я нашел, когда сделал правую кнопку мыши:

D = C:\iso
H = 0
I = :115057472:7932
L = C:\iso
S = 1
V = C:\iso
W = C:\

I возвращал разные наборы чисел при каждой попытке. H всегда был 0, а S всегда был 1. D , L и V все были целевой папкой. W был родителем целевой папки. Кто-нибудь хочет расширить это?

К вашему сведению: я использовал следующие записи реестра для проверки:

[HKEY_CLASSES_ROOT\Directory\shell\testcmd]
@="Test Command Window Directory"
[HKEY_CLASSES_ROOT\Directory\shell\testcmd\command]
@="cmd.exe /k \"echo %A`%B`%C`%D`%E`%F`%G`%H`%I`%J`%K`%L`%M`%N`%O`%P`%Q`%R`%S`%T`%U`%V`%W`%X`%Y`%Z\""

(Символы `использовались для разделителей)

3

Вот аргументы / синтаксис для cmd.exe

/k выполняет команду, указанную в следующей строке, поэтому она выполняет команду pushd %V и поскольку единственным аргументом, который принимает pushd, является путь, из этого следует, что %V - переменная, доставляемая проводником и содержащая путь к папке, щелкнутой правой кнопкой мыши.

1

Действительно, трудно найти, что означает% V или список этих переменных, с помощью Google я обнаружил, что, похоже, существует и% L. Я не думаю, что вам нужно передавать больше, чем% V или% L, хотя бы на подсказку, поскольку я думаю, что нет другой полезной информации. Где% V может быть именем каталога,% L может быть местоположением файла. Выполнение «эха» может помочь в случае сомнений ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .