Windows 배치 파일에서 % ~ d0은 무슨 뜻입니까?


353

다음 변수를 정의하는 배치 파일을보고 있습니다.

set _SCRIPT_DRIVE=%~d0
set _SCRIPT_PATH=%~p0
  • 무엇을 %~d0하거나 %~p0실제로 의미?
  • 현재 디렉토리, 드라이브, 매개 변수와 같은 스크립트에 대한 잘 알려진 값 세트가 있습니까?
  • 사용할 수있는 다른 유사한 단축키가 있습니까?

답변:


539

매직 변수 %n 은 파일을 호출하는 데 사용되는 인수를 포함합니다 %0. bat 파일 자체의 경로 %1이며, 이후 첫 번째 인수 %2이며 두 번째 등입니다.

인수는 종종 파일 경로이므로 경로의 일부를 추출하는 몇 가지 추가 구문이 있습니다. ~d드라이브, ~p경로 (드라이브없이), ~n파일 이름입니다. 그것들은 결합 될 수 있으므로 ~dp드라이브 + 경로입니다.

%~dp0 따라서 bat에서 매우 유용합니다. 실행중인 bat 파일이있는 폴더입니다.

파일에 대한 다른 종류의 메타 정보를 얻을 수도 있습니다. ~t타임 스탬프, ~z크기입니다.

여기에 모든 명령 줄 명령에 대한 참조. 물결표 코드는에 설명되어 있습니다 .


15
자체 참고 사항 : echo %~dp0명령 줄에서는 작동하지 않으며 배치 파일에서만 작동합니다. 어이!
northben

2
%~d0와 사이에 차이가 %~d0%있습니까?
Geoffrey

2
@Pacerier : % 0은 스크립트 파일 이름을 포함한 전체 경로입니다. % ~ dp0은 스크립트를 포함하지만 스크립트의 파일 이름을 제외한 폴더의 경로입니다.
JacquesB

4
자체 참고 : 예상과 반대가 아니라 echo %~pd0반향과 동일한 출력을 제공합니다 %~dp0. 또한 배치 파일 을 두 번 클릭 하거나 cmd에서 실행 하는지 여부에 따라%0다릅니다 .
Pacerier

152

그것들은 향상된 변수 치환입니다. 배치 파일에 사용 된 % N 변수를 수정합니다. Windows에서 배치 프로그래밍을하는 경우 매우 유용합니다.

%~I         - expands %I removing any surrounding quotes ("")
%~fI        - expands %I to a fully qualified path name
%~dI        - expands %I to a drive letter only
%~pI        - expands %I to a path only
%~nI        - expands %I to a file name only
%~xI        - expands %I to a file extension only
%~sI        - expanded path contains short names only
%~aI        - expands %I to file attributes of file
%~tI        - expands %I to date/time of file
%~zI        - expands %I to size of file
%~$PATH:I   - searches the directories listed in the PATH
               environment variable and expands %I to the
               fully qualified name of the first one found.
               If the environment variable name is not
               defined or the file is not found by the
               search, then this modifier expands to the
               empty string

를 실행하여 위를 찾을 수 있습니다 FOR /?.


48

예, 사용할 수있는 다른 바로 가기가 있습니다. 명령에서 ~ d0은 0 번째 인수의 드라이브 문자를 의미합니다.

~ expands the given variable
d gets the drive letter only
0 is the argument you are referencing

0 번째 인수는 스크립트 경로이므로 경로의 드라이브 문자를 가져옵니다. 다음 바로 가기도 사용할 수 있습니다.

%~1         - expands %1 removing any surrounding quotes (")
%~f1        - expands %1 to a fully qualified path name
%~d1        - expands %1 to a drive letter only
%~p1        - expands %1 to a path only
%~n1        - expands %1 to a file name only
%~x1        - expands %1 to a file extension only
%~s1        - expanded path contains short names only
%~a1        - expands %1 to file attributes
%~t1        - expands %1 to date/time of file
%~z1        - expands %1 to size of file
%~$PATH:1   - searches the directories listed in the PATH
               environment variable and expands %1 to the fully
               qualified name of the first one found.  If the
               environment variable name is not defined or the
               file is not found by the search, then this
               modifier expands to the empty string    

%~dp1       - expands %1 to a drive letter and path only
%~nx1       - expands %1 to a file name and extension only
%~dp$PATH:1 - searches the directories listed in the PATH
               environment variable for %1 and expands to the
               drive letter and path of the first one found.
%~ftza1     - expands %1 to a DIR like output line

CALL /?를 실행할 때 명령 프롬프트에서 직접 찾을 수도 있습니다. 또는 FOR /?



9

많은 도움이되는 또 다른 팁은 현재 디렉토리를 다른 드라이브 로 설정하여 %~d0먼저 사용해야하는 것 cd %~dp0입니다. 그러면 디렉토리가 배치 파일의 드라이브로 변경된 다음 해당 폴더로 변경됩니다.

#oneLinerLovers의 cd /d %~dp0경우 드라이브와 디렉토리를 모두 변경합니다 :)

이것이 누군가를 돕기를 바랍니다.


7
또 다른 옵션은 pushd %~dp0현재 드라이브를 변경하는 데 아무런 문제가 없으며 popd나중에 원래 드라이브 / 경로 로 돌아갈 수있는 추가 보너스를 제공합니다 .
bcrist


6

주의해야 할 사항 :

배치 파일 을 두 번 클릭 하면 %0따옴표로 묶습니다. 예를 들어이 파일을 c:\test.bat다음 과 같이 저장하면

@echo %0
@pause

두 번 클릭하면 출력과 함께 새 명령 프롬프트가 열립니다.

"C:\test.bat"

그러나 먼저 명령 프롬프트를 열고 해당 명령 프롬프트에서 직접 호출하면 입력 한%0 내용을 참조합니다 . 당신이 입력 한 경우 의 출력은 더 따옴표를 입력하지 않기 때문에 따옴표가 없습니다 :test.batEnter%0

c:\>test.bat
test.bat

을 입력하면 확장자를 입력하지 않았기 때문에 testEnter출력에 %0확장자도 없습니다.

c:\>test
test

동일 tEsTEnter:

c:\>tEsT
tEsT

을 입력 "test"Enter하면 출력에 %0따옴표가 있지만 따옴표를 사용하지만 확장자는 없습니다.

c:\>"test"
"test"

마지막으로을 입력 "C:\test.bat"하면 두 번 클릭 한 것과 동일한 결과가 출력됩니다.

c:\>"C:\test.bat"
"C:\test.bat"

%0다른 폴더에서 스크립트를 호출 할 수 있기 때문에 가능한 모든 값 이 될 수 는 없습니다 .

c:\some_folder>/../teST.bAt
/../teST.bAt

%~0출력 %~0은 단순히 %0 빼기 따옴표 (있는 경우) 의 출력이기 때문에 위에 표시된 모든 예제도 영향을줍니다 .


3

이 코드는 ~ tilda 문자를 사용하는 방법을 설명합니다. 일단 이것을 이해하면 훨씬 쉽게 이해할 수 있습니다.

@ECHO off
SET "PATH=%~dp0;%PATH%"
ECHO %PATH%
ECHO.
CALL :testargs "these are days" "when the brave endure"
GOTO :pauseit
:testargs
SET ARGS=%~1;%~2;%1;%2
ECHO %ARGS%
ECHO.
exit /B 0
:pauseit
pause

1

현재있는 파일 또는 디렉토리의 현재 위치를 표시합니다. 예를 들어; 배치 파일이 데스크탑 디렉토리에 있으면 "% ~ dp0"이 데스크탑 디렉토리를 표시합니다. 현재 파일 이름으로 현재 디렉토리를 표시하려면 "% ~ dp0 % ~ n0 % ~ x0"을 입력하십시오.


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