Những biến đặc biệt nào có sẵn khi viết lệnh shell cho menu ngữ cảnh


46

Khi mở rộng menu ngữ cảnh shell của Windows (ví dụ: để thêm dấu nhắc 'Mở lệnh ở đây' trên các thư mục), một phím 'lệnh' cần được tạo trong sổ đăng ký.

Giá trị của khóa 'lệnh' này rõ ràng có thể là bất kỳ dòng lệnh hợp lệ nào.

Tôi muốn biết "biến đặc biệt" nào có sẵn để sử dụng bên trong dòng lệnh này.

Ví dụ: tôi sử dụng lệnh sau để mở cửa sổ cmd từ trong menu ngữ cảnh của thư mục (*):

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

Tôi không thể tìm thấy bất kỳ tài liệu tham khảo nào về ý %Vnghĩa thực sự hoặc danh sách đầy đủ của các biến đó là gì.


(*) Các khóa đăng ký sau được tạo cho việc này:

[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\""

Câu trả lời:


58

Một nhận xét của Chris Guzak về bài viết MSDN mở rộng kéo dài liệt kê các "biến dòng lệnh" khác nhau có sẵn:

% * - Thay thế bằng tất cả các tham số.

% ~ - Thay thế bằng tất cả các tham số bắt đầu bằng và theo sau tham số thứ hai.

% 0 hoặc% 1 - Tham số tệp đầu tiên. Ví dụ: "C: \ Users \ Eric \ Desktop \ New Text Document.txt". Nói chung, điều này nên được trích dẫn và phân tích dòng lệnh ứng dụng nên chấp nhận dấu ngoặc kép để phân tán các tệp có khoảng trắng trong tên và các tham số dòng lệnh khác nhau (đây là cách thực hành tốt nhất về bảo mật và tôi tin rằng được đề cập trong MSDN).

% <n> (trong đó <n> là 2-9) - Thay thế bằng tham số thứ n .

% s - Hiển thị lệnh.

% h - Giá trị phím nóng.

% i - IDList được lưu trữ trong bộ xử lý bộ nhớ dùng chung được truyền vào đây.

% l - Dạng tên tệp dài của tham số đầu tiên. Lưu ý rằng các ứng dụng Win32 / 64 sẽ được chuyển qua tên tệp dài, trong khi các ứng dụng Win16 có được tên tệp ngắn. Chỉ định% l được ưu tiên vì nó tránh sự cần thiết phải thăm dò loại ứng dụng.

% d - Tên phân tích cú pháp tuyệt đối của màn hình của tham số đầu tiên (đối với các mục không có đường dẫn hệ thống tệp).

% v - Đối với các động từ không có nghĩa là tất cả. Nếu không có tham số nào được thông qua thì đây là thư mục làm việc.

% w - Thư mục làm việc.

Vì vậy,% L hoặc% l nên được ưu tiên.

Xem thêm http://www.robvanderwoude.com/ntstart.php


18
Tôi không hiểu ý nghĩa của "Đối với các động từ không có nghĩa là tất cả".
Đại tá Panic

2
Một cảnh báo về %W: Nó không phải lúc nào cũng có sẵn và sẽ đưa ra một thông báo lỗi khó hiểu nếu được sử dụng trong commandgiá trị của bạn . Ví dụ: gọi mục menu ngữ cảnh của bạn trên menu ngữ cảnh của ổ đĩa hoặc thư mục sẽ không khởi tạo biến này. Tránh sử dụng nó bên ngoài mục trình đơn ngữ cảnh của trình xử lý tệp.
samthecodingman

Có ai đã thử %~chưa? Tôi chỉ nhận được một lỗi.
cdlvcdlv

2
%Vnên được sử dụng nếu bạn muốn tên thư mục, tức là. khi bạn muốn thêm lệnh của mình trên menu ngữ cảnh khi bạn nhấp vào nền, không phải trên một tệp hoặc tên thư mục. %Lsẽ không làm việc trong trường hợp đó.
EnterTheNameHere Bohemian

11

Câu hỏi này hấp dẫn tôi vì vậy tôi đã làm một số thử nghiệm. Tôi có một thư mục C:\iso. Những gì tôi tìm thấy khi tôi làm điều nhấp chuột phải:

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

Itrả về một bộ số khác nhau trên mỗi lần thử. Hluôn 0 và Sluôn 1. D, LVlà tất cả các thư mục đích. Wcha mẹ của thư mục đích. Bất cứ ai quan tâm để mở rộng về điều này?

FYI: Tôi đã sử dụng các mục đăng ký sau để kiểm tra:

[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\""

(Các ký tự `được sử dụng cho các dấu phân cách)


3
Bạn đã click chuột phải vào thư mục, hoặc vào thư mục?
Đại tá Panic


1

Thật sự rất khó để tìm thấy ý nghĩa của% V hoặc danh sách các biến đó, thông qua Google tôi đã thấy rằng dường như tồn tại% L cũng vậy. Tôi không nghĩ rằng bạn phải vượt quá% V hoặc% L mặc dù đến một dấu nhắc, vì tôi không có thông tin hữu ích nào khác. Trong đó% V có thể là tên thư mục,% L có thể là một vị trí cho một tệp. Làm một 'tiếng vang' có thể giúp đỡ khi nghi ngờ ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.