Які спеціальні змінні доступні під час написання команди оболонки для контекстного меню


46

Під час розширення контекстного меню оболонки Windows (наприклад, для додавання в каталог директорій "Відкрити команду тут") в реєстрі потрібно створити ключ "команда".

Значенням цієї клавіші 'command' очевидно може бути будь-який дійсний командний рядок.

Я хочу знати, які "спеціальні змінні" доступні для використання всередині цього командного рядка.

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

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

Я не можу знайти посилання на те, що %Vнасправді означає або що є повним списком таких змінних.


(*) Для цього створюються наступні ключі реєстру:

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\cmdshell]
@=Open Command Prompt Here"

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\cmdshell\command]
@="cmd.exe /e:on /f:on /s /k pushd \"%V\""

Відповіді:


58

У коментарі Кріса Гузака до статті 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


18
Я не розумію, що мається на увазі під «Для дієслів, які є жодними, не означає всіх».
Полковник Паніка

2
Попередження про %W: воно не завжди доступне, і воно викличе криптовалютне повідомлення про помилку, якщо воно буде використано у вашому commandзначенні. Наприклад, виклик елемента контекстного меню в контекстному меню папки диска або бібліотеки не змінює ініціалізацію цієї змінної. Уникайте його використання поза записом контекстного меню обробника файлів.
samthecodingman

Хтось пробував %~? Я отримую лише помилку.
cdlvcdlv

2
%Vслід використовувати, якщо ви хочете ім'я каталогу, тобто. коли ви хочете додати свою команду в контекстне меню, коли ви клацаєте на тлі, а не на одному файлі чи імені каталогу. %Lв цьому випадку не буде працювати.
EnterTheNameHere Bohemian

11

Це питання мене заінтригувало, тому я кілька експериментував. У мене папка 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був батьком цільової папки. Хтось дбає розширити це?

FYI: Для тестування я використовував такі записи реєстру:

[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
Ви клацніть правою кнопкою миші в папці або на папку?
Полковник Паніка

4

Ось аргументи / синтаксис для cmd.exe

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


1

Дійсно важко знайти, що означає% V або список цих змінних, через Google я виявив, що, здається, існує і% L. Я не думаю, що вам потрібно передавати більше, ніж% V або% L, але для того, щоб підказати, як немає іншої корисної інформації, на мою думку. Там, де% V може бути ім'ям каталогу,% L може бути місцезнаходженням файлу. "Відлуння" може допомогти, коли виникає сумнів ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.