Variabel khusus mana yang tersedia saat menulis perintah shell untuk menu konteks

46

Ketika memperluas menu konteks shell Windows (misalnya untuk menambahkan perintah 'Buka perintah di sini' pada direktori), kunci 'perintah' perlu dibuat di registri.

Nilai kunci 'perintah' ini tampaknya dapat berupa baris perintah apa pun yang valid.

Saya ingin tahu 'variabel khusus' mana yang tersedia untuk digunakan di dalam baris perintah ini.

Sebagai contoh, saya menggunakan perintah berikut untuk membuka jendela cmd dari dalam menu konteks direktori (*):

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

Saya tidak dapat menemukan referensi apa yang %Vsebenarnya berarti atau apa daftar lengkap variabel tersebut.


(*) Kunci registri berikut dibuat untuk ini:

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

Jawaban:

58

Sebuah komentar oleh Chris Guzak pada artikel MSDN Memperluas Shortcut daftar daftar berbagai "variabel baris perintah" yang tersedia:

% * - Ganti dengan semua parameter.

% ~ - Ganti dengan semua parameter dimulai dengan dan mengikuti parameter kedua.

% 0 atau% 1 - Parameter file pertama. Misalnya "C: \ Users \ Eric \ Desktop \ New Text Document.txt". Secara umum ini harus dalam tanda kutip dan aplikasi parsing baris perintah harus menerima tanda kutip untuk menyatukan file dengan spasi dalam nama dan parameter baris perintah yang berbeda (ini adalah praktik terbaik keamanan dan saya percaya disebutkan dalam MSDN).

% <n> (dengan <n> adalah 2-9) - Ganti dengan parameter ke- n .

% s - Tampilkan perintah.

% h - Nilai hotkey.

% i - IDList yang disimpan dalam memori bersama dibagi di sini.

% l - Bentuk nama file panjang dari parameter pertama. Perhatikan bahwa aplikasi Win32 / 64 akan melewati nama file panjang, sedangkan aplikasi Win16 mendapatkan nama file pendek. Menentukan% l lebih disukai karena tidak perlu menyelidiki jenis aplikasi.

% d - Desktop parsing name dari parameter pertama (untuk item yang tidak memiliki jalur sistem file).

% v - Untuk kata kerja yang tidak ada artinya semua. Jika tidak ada parameter yang lulus ini adalah direktori kerja.

% w - Direktori kerja.

Jadi% L atau% l harus lebih disukai.

Lihat juga http://www.robvanderwoude.com/ntstart.php

juze
sumber
18
Saya tidak mengerti apa yang dimaksud dengan "Untuk kata kerja yang tidak ada artinya semua".
Kolonel Panic
2
Peringatan tentang %W: Itu tidak selalu tersedia dan akan melemparkan pesan kesalahan samar jika digunakan dalam commandnilai Anda . Misalnya, memanggil item menu konteks Anda pada menu konteks drive atau folder library tidak akan menginisialisasi variabel ini. Hindari penggunaannya di luar entri menu konteks penangan file.
samthecodingman
Adakah yang sudah mencoba %~? Saya hanya mendapatkan kesalahan.
cdlvcdlv
2
%Vharus digunakan jika Anda ingin nama direktori, yaitu. ketika Anda ingin menambahkan perintah Anda pada menu konteks ketika Anda mengklik latar belakang, bukan pada satu file atau nama direktori. %Ltidak akan bekerja dalam kasus itu.
EnterTheNameHere Bohemian
11

Pertanyaan ini membuat saya penasaran sehingga saya melakukan beberapa percobaan. Saya punya folder C:\iso. Apa yang saya temukan ketika saya melakukan hal klik kanan:

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

Imengembalikan serangkaian angka yang berbeda pada setiap percobaan. Hselalu 0 dan Sselalu 1 D. L,, dan Vsemua folder target. Wadalah induk dari folder target. Adakah yang mau memperluas ini?

FYI: Saya menggunakan entri registri berikut untuk menguji:

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

(Karakter `digunakan untuk pembatas)

BillP3rd
sumber
3
Apakah Anda mengklik kanan di folder, atau di folder?
Kolonel Panic
1

Memang sulit untuk menemukan apa arti% V atau daftar variabel-variabel itu, melalui Google Saya telah menemukan bahwa tampaknya ada juga% L. Saya tidak berpikir Anda harus melewati lebih dari% V atau% L ke prompt, karena menurut saya tidak ada informasi berguna lainnya. Di mana% V bisa menjadi nama direktori,% L bisa menjadi lokasi ke file. Melakukan 'gema' dapat membantu ketika ragu ...

Tamara Wijsman
sumber