다음 변수를 정의하는 배치 파일을보고 있습니다.
set _SCRIPT_DRIVE=%~d0
set _SCRIPT_PATH=%~p0
- 무엇을
%~d0
하거나%~p0
실제로 의미? - 현재 디렉토리, 드라이브, 매개 변수와 같은 스크립트에 대한 잘 알려진 값 세트가 있습니까?
- 사용할 수있는 다른 유사한 단축키가 있습니까?
답변
매직 변수 %
n 은 파일을 호출하는 데 사용되는 인수를 포함합니다 %0
. bat 파일 자체의 경로 %1
이며, 이후 첫 번째 인수 %2
이며 두 번째 등입니다.
인수는 종종 파일 경로이므로 경로의 일부를 추출하는 몇 가지 추가 구문이 있습니다. ~d
드라이브, ~p
경로 (드라이브없이), ~n
파일 이름입니다. 그것들은 결합 될 수 있으므로 ~dp
드라이브 + 경로입니다.
%~dp0
따라서 bat에서 매우 유용합니다. 실행중인 bat 파일이있는 폴더입니다.
파일에 대한 다른 종류의 메타 정보를 얻을 수도 있습니다. ~t
타임 스탬프, ~z
크기입니다.
답변
그것들은 향상된 변수 치환입니다. 배치 파일에 사용 된 % 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 /?
.
답변
예, 사용할 수있는 다른 바로 가기가 있습니다. 명령에서 ~ 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 /?
답변
답변
많은 도움이되는 또 다른 팁은 현재 디렉토리를 다른 드라이브 로 설정하여 %~d0
먼저 사용해야하는 것 cd %~dp0
입니다. 그러면 디렉토리가 배치 파일의 드라이브로 변경된 다음 해당 폴더로 변경됩니다.
#oneLinerLovers의 cd /d %~dp0
경우 드라이브와 디렉토리를 모두 변경합니다 🙂
이것이 누군가를 돕기를 바랍니다.
답변
%~d0
인수 0 (스크립트 이름)의 드라이브 문자 %~p0
경로를 제공합니다.
답변
주의해야 할 사항 :
배치 파일 을 두 번 클릭 하면 %0
따옴표로 묶습니다. 예를 들어이 파일을 c:\test.bat
다음 과 같이 저장하면
@echo %0
@pause
두 번 클릭하면 출력과 함께 새 명령 프롬프트가 열립니다.
"C:\test.bat"
그러나 먼저 명령 프롬프트를 열고 해당 명령 프롬프트에서 직접 호출하면 입력 한%0
내용을 참조합니다 . 당신이 입력 한 경우 의 출력은 더 따옴표를 입력하지 않기 때문에 따옴표가 없습니다 :test.bat
Enter%0
c:\>test.bat
test.bat
을 입력하면 확장자를 입력하지 않았기 때문에 test
Enter출력에 %0
확장자도 없습니다.
c:\>test
test
동일 tEsT
Enter:
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
빼기 따옴표 (있는 경우) 의 출력이기 때문에 위에 표시된 모든 예제도 영향을줍니다 .