2008-09-24 6 views

답변

53

레이몬드 첸은 몇 가지 아이디어가 있습니다

쉬운 방법은을 사용하는 것입니다 : MSDN 아카이브가 어느 정도 신뢰할 수없는 경향이 있기 때문에 전체 여기에 인용

http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx

%CD% 의사 변수. 현재 작업 디렉토리 으로 확장됩니다. .. do stuff ..
chdir /d %OLDDIR% &rem restore current directory

set OLDDIR=%CD%
은 (물론, 디렉토리는/더 쉽게 는 pushd/popd으로 수행되어 있지만, 여기서는 요점이 아니에요 수 복원하기.)

%CD% 트릭 명령 행에서도 편리합니다. 예를 들어, 은 종종 에 작업하려는 파일이있는 디렉토리에서 자신을 찾습니다.하지만 ... 오, 그 작업을 수행하려면 의 순서로 다른 디렉토리에 chdir해야합니다. cd ... some other directory ...
somecommand args %_% args

set _=%CD%\curfile.txt

은 (I 내 스크래치 환경 변수로 %_%를 사용하고 싶다.)

타입 SET /? 명령 프로세서에 의해 제공되는 다른 유사 변수를 표시.

는 또한 문서의 의견은 가치, 예를 들어 스캔이 하나 :이 %의 사용에 대해 설명

http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx#362741

~ DP0 :

하는 경우 배치 파일의 저장 위치를 ​​알고 싶습니다. %~dp0

%0은 배치 파일의 이름입니다. ~dp은 지정된 인수 인 의 드라이브와 경로를 제공합니다.

+12

이 질문에는 대답하지 않습니다. % CD %는 현재 디렉토리를 제공하고, 묻는 것은 스크립트 디렉토리입니다. – ketorin

+3

** @ ketorin : ** ** ** 답변 **이 질문에 답합니다. % CD %는 스크립트 자체가 디렉토리 (pushd/cd/..)를 통해 디렉토리를 변경하지만 ** % ~ dp0 **이 ** 변경되지 않고 항상 스크립트가있는 위치를 가리키면 변경됩니다. – Jay

+0

-1이 질문에 대한 답변 여부는 알 수 없습니다. 예를 보여줄 수 있습니까? –

135

이 스크립트의 경로에 상당 :

%~dp0 

이것은 배치 파라미터 확장 구문을 이용한다. 매개 변수 0은 항상 스크립트 자체입니다.

스크립트가 C:\example\script.bat에 저장된 경우 %~dp0C:\example\으로 평가됩니다.

ss64.com에는 매개 변수 확장 구문에 대한 자세한 정보가 있습니다. 다음은 관련 발췌 부분입니다.

매개 변수의 값은 % 다음에 명령 행의 숫자 위치를 사용하여 얻을 수 있습니다.

[...]

파라미터는 다음 확장 구문을 적용 할 수있는 파일명 공급하는데 사용된다

:

[...]

퍼센트 ~ D1 % 1 확장을 드라이브 문자 만 - C :

[...]

퍼센트 ~ P1은 경로 % 1을 확장에만 예 \ utils \ this는 일부 명령에 의해 이스케이프 문자로 해석 될 수있는 후미를 포함합니다.

[...] 상기 한 결합 될 수

수식어 :

퍼센트 드라이브 문자 및 경로 만

[...]

% 1을 확장 ~ DP1 배치 스크립트 자체의 경로 이름을 % 0으로 가져올 수 있습니다. 매개 변수 확장을이 경로에 적용 할 수 있습니다. % ~ dp0은 배치 스크립트에 대한 드라이브 및 경로를 반환합니다. W : \ 스크립트

\
+0

정확히 내가 필요한 것. 그리고이 anwser를 미리 알림으로 블로그에 연결했습니다 :) –

+0

인용문에서 버그/오류가 있는지는 모르지만 스크립트에서는 "% ~ d0"이 필요합니다! 내 경우에는 % ~ d1이 비어 있습니다. – eftokay83

+0

내 눈/상황에서 이것은 수용된 대답보다 우수합니다.명령 줄 스크립트를 "관리자 권한으로"실행 (오른쪽 클릭)하면 스크립트가 Windows \ system32에서 실행됩니다. 허용 된 대답은 스크립트 위치를 알려주지 않으며 Windows \ system32를 다시 제공합니다. 나는. 이 답변은 당신이 그것을 고칠 수 있도록 도와줍니다. 여러분은 cd % ~ dp0로 스크립트를 시작합니다. –

1
for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d 

pushd %curdir% 

Source

관련 문제