コンテキストメニューのシェルコマンドを記述するときに使用できる特別な変数


46

Windowsのシェルコンテキストメニューを拡張する場合(たとえば、ディレクトリに「ここでコマンドを開く」プロンプトを追加する場合)、「コマンド」キーをレジストリに作成する必要があります。

この「コマンド」キーの値は、明らかに任意の有効なコマンドラインにすることができます。

このコマンドライン内で使用できる「特殊変数」を知りたいです。

たとえば、ディレクトリのコンテキストメニュー(*)から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の記事に関するChris Guzakのコメントには、使用可能なさまざまな「コマンドライン変数」がリストされています。

%* –すべてのパラメーターで置き換えます。

%〜– 2番目のパラメーター以降のすべてのパラメーターで置き換えます。

%0または%1 –最初のファイルパラメーター。たとえば、「C:\ Users \ Eric \ Desktop \ New Text Document.txt」。通常、これは引用符で囲む必要があり、アプリケーションのコマンドライン解析では引用符を受け入れて、名前にスペースと異なるコマンドラインパラメーターを含むファイルを明確にする必要があります(これはセキュリティのベストプラクティスであり、MSDNで言及されていると思います)。

%<n>(<n>は2〜9)– n 番目のパラメーターに置き換えます。

%s –コマンドを表示します。

%h –ホットキー値。

%i –共有メモリハンドルに格納されたIDListがここに渡されます。

%l –最初のパラメーターの長いファイル名形式。Win32 / 64アプリケーションには短いファイル名が付けられるのに対し、Win32 / 64アプリケーションには長いファイル名が渡されることに注意してください。%lを指定すると、アプリケーションタイプをプローブする必要がなくなるため、推奨されます。

%d –デスクトップの最初のパラメーターの絶対解析名(ファイルシステムパスを持たないアイテムの場合)。

%v –なしの動詞の場合はすべてを意味します。パラメータが渡されない場合、これは作業ディレクトリです。

%w –作業ディレクトリ。

したがって、%Lまたは%lを優先する必要があります。

http://www.robvanderwoude.com/ntstart.phpも参照してください


18
「なしの動詞の場合はすべてを意味する」とはどういう意味かわかりません。
パニック大佐

2
警告%W:常に使用できるとは限らないため、command値で使用すると、不可解なエラーメッセージがスローされます。たとえば、ドライブまたはライブラリフォルダーのコンテキストメニューでコンテキストメニュー項目を呼び出しても、この変数は初期化されません。ファイルハンドラーのコンテキストメニューエントリ以外では使用しないでください。
samthecodingman

誰か試してみました%~か?エラーが発生するだけです。
cdlvcdlv

2
%Vディレクトリ名が必要な場合に使用します。単一のファイルやディレクトリ名ではなく、背景をクリックしたときにコンテキストメニューにコマンドを追加する場合。%Lその場合は動作しません。
EnterTheNameHereボヘミアン

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だったDLと、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
あなたは右クリックしました、フォルダ、または上のフォルダ?
パニック大佐


1

%Vの意味やそれらの変数のリストを見つけるのは本当に難しいです。Googleを通じて、%Lも存在しているようだとわかりました。他に有用な情報はないと思うので、プロンプトに%Vまたは%L以上を渡す必要はないと思います。%Vがディレクトリ名である場合、%Lはファイルの場所です。「エコー」を行うと、疑わしいときに役立ちます...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.