첫째, 나는 이 주제를 보았지만 이해할 수 없었습니다.
질문 :
D:\path\to\file.bat
다음 내용으로 된 배치 파일이 있습니다.
echo %cd%
pause
출력 :
C:\
반드시 있어야합니다 D:\path\to
내가 뭘 잘못하고 있죠?
첫째, 나는 이 주제를 보았지만 이해할 수 없었습니다.
질문 :
D:\path\to\file.bat
다음 내용으로 된 배치 파일이 있습니다.
echo %cd%
pause
출력 :
C:\
반드시 있어야합니다 D:\path\to
내가 뭘 잘못하고 있죠?
답변:
시스템 읽기 전용 변수 %CD%
는 배치 파일 위치가 아니라 배치 호출자의 경로를 유지합니다.
%0
(예 :)를 사용하여 사용자가 입력 한 배치 스크립트 자체의 이름을 얻을 수 있습니다 scripts\mybatch.bat
. 매개 변수 확장 이 너무에 적용 할 수있는 %~dp0
배치 스크립트 (예에 드라이브 및 경로를 반환 W:\scripts\
) 및 %~f0
전체 경로 이름 (예를 반환합니다 W:\scripts\mybatch.cmd
).
이 구문을 사용하여 배치 스크립트와 동일한 폴더에있는 다른 파일을 참조 할 수 있습니다.
CALL %0\..\SecondBatch.cmd
서브 루틴에서도 사용할 Echo %0
수 있으며 호출 레이블을 제공하지만 echo "%~nx0"
배치 스크립트의 파일 이름을 제공합니다.
때 %0
변수가 팽창 결과는 인용 부호된다.
stm.sql
에서 D:\Dir1\Dir2\stm.sql
. mysql.exe -u root -p mysql < %cd%\stm.sql
stm.sql 명령을 실행 해야 합니다.
*.bat
또는 같은 배치 파일이 아니 *.sh
십니까?
D:\Dir1\Dir2\batchfile.bat
와 D:\Dir1\Dir2\stm.sql
. batchfile.bat 내용은 : mysql.exe -u root -p mysql < D:\Dir1\Dir2\stm.sql
이고 stm.sql 내용은 일부 MySQL 명령입니다.
echo %~dp0
배치 위치로 경로를 반환합니다. echo %~f0
파일 이름으로 배치 경로를 반환합니다.
매우 간단합니다 :
setlocal
cd /d %~dp0
File.exe
cd /d %~dp0
배치 파일의 첫 줄로 사용 하고 작동했습니다
.bat 파일 내에서 :
set mypath=%cd%
이제 변수 %mypath%
를 사용하여 파일의 파일 경로를 참조 할 수 있습니다 .bat
. 경로가 올바른지 확인하려면 다음을 수행하십시오.
@echo %mypath%
예를 들어 DIR.bat
다음 내용으로 호출 된 파일
set mypath=%cd%
@echo %mypath%
Pause
디렉토리에서 실행 g:\test\bat
하면 DOS 명령 창에서 해당 경로가 에코됩니다.
다음은 모든 배치 파일 상단에서 사용하는 것입니다. 템플릿 폴더에서 복사 / 붙여 넣기 만하면됩니다.
@echo off
:: --HAS ENDING BACKSLASH
set batdir=%~dp0
:: --MISSING ENDING BACKSLASH
:: set batdir=%CD%
pushd "%batdir%"
현재 배치 파일의 경로를 % batdir %로 설정하면이 배치 파일이 변경되는 위치에 관계없이 현재 배치 파일의 후속 stmt에서이를 호출 할 수 있습니다. PUSHD를 사용하면 POPD를 사용하여이 배치 파일의 경로를 원래 % batdir %로 빠르게 설정할 수 있습니다. % batdir % ExtraDir 또는 % batdir % \ ExtraDir (위에서 사용 된 버전에 따라, 백 슬래시 종료 여부)을 사용하는 경우 경로에 공백이있는 경우 전체 문자열을 큰 따옴표로 묶어야합니다 (예 : "% batdir % ExtraDir" ). 항상 PUSHD % ~ dp0을 사용할 수 있습니다. [https : // ss64.com/ nt / syntax-args .html]에 더 많은 (% ~) 매개 변수가 있습니다.
줄의 시작 부분에 (: :)을 사용하면 주석 줄이됩니다. 더 중요한 것은 ::를 사용하면 해당 주석에 리디렉터, 파이프, 특수 문자 (예 : <> | 등)를 포함 할 수 있습니다.
:: ORIG STMT WAS: dir *.* | find /v "1917" > outfile.txt
물론 Powershell은이 작업과 그 밖의 작업을 수행합니다.
set batdir=%CD%
)을 조심하십시오 . 박쥐 파일 자체가 아닌 호출자의 경로이기 때문에 괜찮습니다. bat 파일을 실행하는 유일한 방법은 %~dp0
입니다.