상황에 맞는 메뉴에 대한 쉘 명령을 작성할 때 사용 가능한 특수 변수


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"입니다. 일반적으로 이것은 따옴표로 묶어야하며 응용 프로그램 명령 줄 구문 분석은 이름과 다른 명령 줄 매개 변수에 공백이있는 파일을 명확하게하기 위해 따옴표를 사용해야합니다 (이것은 보안 모범 사례이며 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
"아무 것도없는 동사"라는 의미가 무엇인지 이해하지 못합니다.
Colonic Panic

2
다음에 대한 경고 %W: 항상 사용 가능한 것은 아니며 command값에 사용되면 암호 오류 메시지가 표시됩니다 . 예를 들어, 드라이브 또는 라이브러리 폴더의 상황에 맞는 메뉴에서 상황에 맞는 메뉴 항목을 호출하면이 변수가 초기화되지 않습니다. 파일 핸들러의 컨텍스트 메뉴 항목 외부에서 사용하지 마십시오.
samthecodingman

아무도 시도 %~했습니까? 오류 만 발생합니다.
cdlvcdlv

2
%V디렉토리 이름을 원한다면 사용해야합니다. 단일 파일이나 디렉토리 이름이 아닌 배경을 클릭 할 때 상황에 맞는 메뉴에서 명령을 추가하려는 경우 %L이 경우에는 작동하지 않습니다.
EnterTheName Here 보헤미안

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부모 였습니다. 누구든지 이것을 확장해야합니까?

참고 : 다음 레지스트리 항목을 사용하여 테스트했습니다.

[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
당신은 마우스 오른쪽 버튼을 클릭나요 에서 폴더, 또는 폴더?
Colonic Panic


1

% V가 무엇을 의미하는지 또는 변수 목록을 찾기가 실제로는 어렵습니다 .Google을 통해 % L도 존재하는 것으로 나타났습니다. 다른 유용한 정보가 없기 때문에 프롬프트에 % V 또는 % L 이상을 전달해야한다고 생각하지 않습니다. % V는 디렉토리 이름이 될 수 있고 % L은 파일의 위치가 될 수 있습니다. '에코'를하는 것은 의심 스러울 때 도움이 될 수 있습니다 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.