답변:
매직 변수 %
n 은 파일을 호출하는 데 사용되는 인수를 포함합니다 %0
. bat 파일 자체의 경로 %1
이며, 이후 첫 번째 인수 %2
이며 두 번째 등입니다.
인수는 종종 파일 경로이므로 경로의 일부를 추출하는 몇 가지 추가 구문이 있습니다. ~d
드라이브, ~p
경로 (드라이브없이), ~n
파일 이름입니다. 그것들은 결합 될 수 있으므로 ~dp
드라이브 + 경로입니다.
%~dp0
따라서 bat에서 매우 유용합니다. 실행중인 bat 파일이있는 폴더입니다.
파일에 대한 다른 종류의 메타 정보를 얻을 수도 있습니다. ~t
타임 스탬프, ~z
크기입니다.
%~d0
와 사이에 차이가 %~d0%
있습니까?
echo %~pd0
반향과 동일한 출력을 제공합니다 %~dp0
. 또한 배치 파일 을 두 번 클릭 하거나 cmd에서 실행 하는지 여부에 따라 값 %0
이 다릅니다 .
그것들은 향상된 변수 치환입니다. 배치 파일에 사용 된 % 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 /?
%~s0
전체 스크립트 이름을 설명합니다 .
많은 도움이되는 또 다른 팁은 현재 디렉토리를 다른 드라이브 로 설정하여 %~d0
먼저 사용해야하는 것 cd %~dp0
입니다. 그러면 디렉토리가 배치 파일의 드라이브로 변경된 다음 해당 폴더로 변경됩니다.
#oneLinerLovers의 cd /d %~dp0
경우 드라이브와 디렉토리를 모두 변경합니다 :)
이것이 누군가를 돕기를 바랍니다.
pushd %~dp0
현재 드라이브를 변경하는 데 아무런 문제가 없으며 popd
나중에 원래 드라이브 / 경로 로 돌아갈 수있는 추가 보너스를 제공합니다 .
주의해야 할 사항 :
배치 파일 을 두 번 클릭 하면 %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
빼기 따옴표 (있는 경우) 의 출력이기 때문에 위에 표시된 모든 예제도 영향을줍니다 .
현재있는 파일 또는 디렉토리의 현재 위치를 표시합니다. 예를 들어; 배치 파일이 데스크탑 디렉토리에 있으면 "% ~ dp0"이 데스크탑 디렉토리를 표시합니다. 현재 파일 이름으로 현재 디렉토리를 표시하려면 "% ~ dp0 % ~ n0 % ~ x0"을 입력하십시오.
echo %~dp0
명령 줄에서는 작동하지 않으며 배치 파일에서만 작동합니다. 어이!