ตัวแปรพิเศษใดที่พร้อมใช้งานเมื่อเขียนคำสั่งเชลล์สำหรับเมนูบริบท


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

ความคิดเห็นโดยChris Guzakในบทความเมนูทางลัดเมนูขยาย MSDN แสดงรายการ "ตัวแปรบรรทัดคำสั่ง" ที่มีอยู่:

% * - แทนที่ด้วยพารามิเตอร์ทั้งหมด

% ~ - แทนที่ด้วยพารามิเตอร์ทั้งหมดที่ขึ้นต้นด้วยและติดตามพารามิเตอร์ที่สอง

% 0 หรือ% 1 - พารามิเตอร์ไฟล์แรก ตัวอย่างเช่น "C: \ Users \ Eric \ Desktop \ New Text Document.txt" โดยทั่วไปสิ่งนี้ควรอยู่ในเครื่องหมายคำพูดและการแยกวิเคราะห์บรรทัดคำสั่งของแอปพลิเคชันควรยอมรับเครื่องหมายคำพูดเพื่อแยกแยะไฟล์ที่มีช่องว่างในชื่อและพารามิเตอร์บรรทัดคำสั่งต่าง ๆ (นี่เป็นแนวทางปฏิบัติด้านความปลอดภัยที่ดีที่สุด

% <n> (ที่ <n> เป็น 2-9) - เปลี่ยนกับ n THพารามิเตอร์

% s - แสดงคำสั่ง

% h - ค่าสายด่วน

% i - IDList ที่เก็บไว้ในตัวจัดการหน่วยความจำที่ใช้ร่วมกันถูกส่งผ่านที่นี่

% l - รูปแบบชื่อไฟล์แบบยาวของพารามิเตอร์แรก โปรดทราบว่าแอปพลิเคชัน Win32 / 64 จะถูกส่งผ่านชื่อไฟล์แบบยาวในขณะที่แอปพลิเคชัน Win16 จะได้รับชื่อไฟล์แบบสั้น การระบุ% l เป็นที่ต้องการเนื่องจากไม่จำเป็นต้องใช้โพรบสำหรับประเภทแอปพลิเคชัน

% d - ชื่อแยกวิเคราะห์แน่นอนบนเดสก์ท็อปของพารามิเตอร์แรก (สำหรับรายการที่ไม่มีเส้นทางของระบบไฟล์)

% v - สำหรับคำกริยาที่ไม่มีความหมายทั้งหมด หากไม่มีพารามิเตอร์ที่ผ่านนี่เป็นไดเรกทอรีการทำงาน

% w - ไดเรกทอรีที่ใช้งานได้

ดังนั้นควรเลือก% L หรือ% l

ดูhttp://www.robvanderwoude.com/ntstart.php


18
ฉันไม่เข้าใจความหมายของคำว่า "สำหรับคำกริยาที่ไม่มีความหมายทั้งหมด"
พันเอก Panic

2
คำเตือนเกี่ยวกับ%W: ไม่สามารถใช้งานได้ตลอดเวลาและจะโยนข้อความแสดงข้อผิดพลาดแบบเข้ารหัสหากใช้ในcommandค่าของคุณ ตัวอย่างเช่นการเรียกรายการเมนูบริบทของคุณบนเมนูบริบทของไดรฟ์หรือโฟลเดอร์ไลบรารีจะไม่เริ่มต้นตัวแปรนี้ หลีกเลี่ยงการใช้นอกเหนือจากรายการเมนูบริบทของตัวจัดการไฟล์
samthecodingman

มีใครลอง%~บ้างไหม ฉันได้รับข้อผิดพลาดเท่านั้น
cdlvcdlv

2
%Vควรใช้ถ้าคุณต้องการชื่อไดเรกทอรีเช่น เมื่อคุณต้องการเพิ่มคำสั่งของคุณในเมนูบริบทเมื่อคุณคลิกที่พื้นหลังไม่ได้อยู่ในไฟล์เดียวหรือชื่อไดเรกทอรี %Lจะไม่ทำงานในกรณีนั้น
EnterTheName นี่โบฮีเมีย

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
คุณคลิกขวาในโฟลเดอร์หรือในโฟลเดอร์?
พันเอก Panic

4

นี่คืออาร์กิวเมนต์ / ไวยากรณ์สำหรับ cmd.exe

/kดำเนินการคำสั่งที่ระบุโดยสตริงต่อไปนี้เพื่อเรียกใช้งานคำสั่งpushd %V และเนื่องจากอาร์กิวเมนต์ pushdเดียวที่ยอมรับคือพา ธ ตาม%Vด้วยตัวแปรที่ส่งโดย explorer ที่มีพา ธ ของโฟลเดอร์คลิกขวา


1

เป็นเรื่องยากที่จะค้นหาว่า% V หมายถึงอะไรหรือรายการตัวแปรเหล่านั้นผ่าน Google ฉันพบว่ามี% L อยู่เหมือนกัน ฉันไม่คิดว่าคุณจะต้องผ่านมากกว่า% V หรือ% L แม้ว่าจะเป็นพรอมต์เนื่องจากไม่มีข้อมูลที่เป็นประโยชน์อื่น ๆ ที่ฉันคิด โดยที่% V อาจเป็นชื่อไดเรกทอรี% L อาจเป็นที่ตั้งของไฟล์ การทำ 'echo' สามารถช่วยได้เมื่อมีข้อสงสัย ...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.