[batch-file] % ~ dp0은 무엇을 의미하며 어떻게 작동합니까?

나는 %~dp0매우 유용하다고 생각하며 배치 파일을보다 이식성이있게 만들기 위해 많이 사용합니다.

그러나 레이블 자체는 나에게 매우 비밀스러워 보입니다 … 무엇을 ~하고 있습니까? dp드라이브와 경로를 의미 합니까 ? 파일 이름이 포함 된 배치 파일의 경로를 0참조 합니까 %0?

아니면 이상한 라벨입니까?

문서화 된 기능인지 또는 더 이상 사용되지 않는 것이 있는지 알고 싶습니다.



답변

부름

for /?

명령 행에서이 구문에 대한 도움말을 제공합니다 (FOR 외부에서도 사용할 수 있음). 도움말을 찾을 수있는 곳입니다.

또한 FOR 변수 참조의 대체가 향상되었습니다. 이제 다음과 같은 선택적 구문을 사용할 수 있습니다.

%~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

수정자를 결합하여 복합 결과를 얻을 수 있습니다.

%~dpI       - expands %I to a drive letter and path only
%~nxI       - expands %I to a file name and extension only
%~fsI       - expands %I to a full path name with short names only
%~dp$PATH:I - searches the directories listed in the PATH
               environment variable for %I and expands to the
               drive letter and path of the first one found.
%~ftzaI     - expands %I to a DIR like output line

위의 예에서 % I 및 PATH는 다른 유효한 값으로 대체 될 수 있습니다. % ~ 구문은 유효한 FOR 변수 이름으로 종료됩니다. % I와 같은 대문자 변수 이름을 선택하면 더 읽기 쉽고 대소 문자를 구분하지 않는 수정 자와 혼동되지 않습니다.

f“전체 경로 이름”, d드라이브 문자, 경로 와 같이 사용할 수있는 다른 문자 p가 있으며 조합 할 수 있습니다. %~각 시퀀스의 시작 부분이며 숫자 I는 매개 변수에서 작동 함을 나타냅니다 %I(여기서 %0배치 파일의 전체 이름은 가정 한대로).


답변

(먼저 배치에 대한이 유용한 참조 사이트를 추천하고 싶습니다 :
http://ss64.com/nt/ )

그런 다음 또 다른 유용한 설명 : http://htipe.wordpress.com/2008/10/09/the-dp0-variable/

% ~ dp0 변수

받는 사람 확장하는 Windows 배치 파일 내에서 참조 할 때 %는 ~ DP0 변수 (즉, 제로의) D 리베 문자와 P는 그 배치 파일의 ATH.

변수 % 0- % 9는 배치 파일의 명령 줄 매개 변수를 나타냅니다. % 1- % 9는 배치 파일 이름 뒤의 명령 줄 인수를 나타냅니다. % 0은 (는) 배치 파일 자체를 나타냅니다.

물결표 문자 (~)로 퍼센트 문자 (%)를 따르는 경우 변수가 확장되는 방식을 변경하기 위해 매개 변수 번호 앞에 수정자를 삽입 할 수 있습니다. d 수정자는 드라이브 문자로 확장되고 p 수정자는 매개 변수의 경로로 확장됩니다.

예 : C :에 bat_files라는 디렉토리가 있고 그 디렉토리에 example.bat라는 파일이 있다고 가정하십시오. 이 경우 % ~ dp0 (d와 p 수정자를 결합한)은 C : \ bat_files로 확장됩니다.

자세한 설명은 이 Microsoft 기사 를 확인하십시오 .

또한 이 포럼 스레드를 확인하십시오 .

그리고 여기 에서보다 명확한 참조 :

  • %CmdCmdLine% CMD.EXE에 전달 된 전체 명령 줄을 반환합니다

  • %* 첫 번째 명령 줄 인수에서 시작하여 나머지 명령 줄을 반환합니다 (Windows NT 4의 경우 % *에는 모든 선행 공백이 포함됨)

  • %~dn % n이 유효한 경로 또는 파일 이름 (UNC 없음) 인 경우 드라이브 문자 % n (n은 0에서 9 사이의 범위)을 반환

  • %~pn % n이 유효한 경로 또는 파일 이름 인 경우 % n의 디렉토리를 반환합니다 (UNC 없음)

  • %~nn % n이 유효한 파일 이름 인 경우 % n의 파일 이름 만 반환합니다.

  • %~xn % n이 유효한 파일 이름 인 경우 % n의 파일 확장자 만 반환합니다.

  • %~fn % n이 유효한 파일 이름 또는 디렉토리 인 경우 % n의 완전한 경로를 리턴합니다.

추가 1

신비한 ~ 물결표 연산자에 대한 좋은 참고 자료를 찾았습니다 .

%~문자열을 퍼센트 물결표 연산자 라고 합니다. 다음과 같은 상황에서 찾을 수 있습니다 %~0.

:~문자열을 콜론 틸드 연산자 라고 합니다. 당신은 그것을 찾을 수 있습니다 %SOME_VAR:~0,-1%.

추가 2-1:12 오후 7/6/2018

%1-%9명령 행 인수를 참조하십시오. 유효한 경로 값 이 아닌 경우 %~dp1%~dp9는 모두 같은 값으로 확장됩니다 %~dp0. 그들이하지만 있는 유효한 경로 값은, 그들로 확장됩니다 자신의 드라이버 / 경로 값.

예를 들면 다음과 같습니다. (batch.bat)

@echo off
@echo ~dp0= %~dp0
@echo ~dp1= %~dp1
@echo ~dp2= %~dp2
@echo on

실행 1 :

D:\Workbench>batch arg1 arg2

~dp0= D:\Workbench\
~dp1= D:\Workbench\
~dp2= D:\Workbench\

실행 2 :

D:\Workbench>batch c:\123\a.exe e:\abc\b.exe

~dp0= D:\Workbench\
~dp1= c:\123\
~dp2= e:\abc\


답변

%0배치 스크립트 의 변수 는 실행중인 배치 파일의 이름으로 설정됩니다.

~dp사이 의 특수 구문 %0기본적으로 변수를 확장 %0하여 드라이브 문자와 경로를 표시하므로 배치 파일이 들어있는 현재 디렉토리를 제공합니다!

도움말 = 링크


답변

% ~ dp0은 실행중인 배치 파일의 현재 디렉토리 경로로 확장됩니다.

명확한 이해를 위해 디렉토리에 배치 파일을 만들어 봅시다.

C : \ script \ test.bat

내용과 함께 :

@echo off
echo %~dp0

명령 프롬프트에서 실행하면 다음과 같은 결과가 나타납니다.

C : \ 스크립트 \


답변

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

또는 #oneLinerLovers의 경우 @Omni가 주석에서 지적한 것처럼 cd /d %~dp0드라이브와 디렉토리를 모두 변경합니다 🙂

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


답변

Strawberry Perl의 휴대용 쉘 발사기의 좋은 예 :

set drive=%~dp0
set drivep=%drive%
if #%drive:~-1%# == #\# set drivep=%drive:~0,-1%

set PATH=%drivep%\perl\site\bin;%drivep%\perl\bin;%drivep%\c\bin;%PATH%

부정적인 1이 자신이 무엇을하고 있는지 확실하지 않지만 대접을합니다!


답변

예가 좋을 것입니다-여기에 사소한 것이 있습니다.

for %I in (*.*) do @echo %~xI

현재 폴더에있는 각 파일의 확장자 만 나열합니다.

CMD 프롬프트에서 더 유용한 변수 조합 (이전 응답에도 나열 됨)을 실행하려면 HELP FOR
이 코드 조각이 포함되어 있습니다.

수정자를 결합하여 복합 결과를 얻을 수 있습니다.

%~dpI       - expands %I to a drive letter and path only
%~nxI       - expands %I to a file name and extension only
%~fsI       - expands %I to a full path name with short names only
%~dp$PATH:I - searches the directories listed in the PATH
               environment variable for %I and expands to the
               drive letter and path of the first one found.
%~ftzaI     - expands %I to a DIR like output line