디렉토리에 배치 파일이 있으며이 디렉토리 내의 파일을 업데이트하기 때문에 거기에서도 실행되어야합니다.
사용자가 관리자 권한으로 배치 파일을 실행하는 경우를 제외하고는 완벽하게 작동합니다 (Vista에 필요). 그러면 시작 디렉터리는 C : \ Windows \ System32입니다.
배치 파일이 실행 된 디렉토리를 알 수있는 방법이 있습니까?
사용자가 디렉토리를 수동으로 입력하는 것을 원하지 않습니다.
답변:
다음과 같이 배치 파일 경로에 액세스하십시오.
echo %~dp0
자세한 내용 for /?
은 위 명령의 작동 방식을 설명하는 명령에서 다음 인용문을 참조하십시오 .
이제 다음과 같은 선택적 구문을 사용할 수 있습니다. % ~ I-주변 따옴표 ( ")를 제거하여 % I를 확장합니다. % ~ fI-% I를 완전한 경로 이름으로 확장합니다. % ~ dI-% I를 드라이브 문자로만 확장합니다. % ~ pI-% I를 경로로만 확장합니다. % ~ nI-% I를 파일 이름으로 만 확장합니다. % ~ xI-% I를 파일 확장자로만 확장합니다. % ~ sI-확장 된 경로에 짧은 이름 만 포함됨 % ~ aI-% I를 파일의 파일 속성으로 확장합니다. % ~ tI-% I를 파일의 날짜 / 시간으로 확장합니다. % ~ zI-% I을 파일 크기로 확장 % ~ $ PATH : I-PATH에 나열된 디렉토리를 검색합니다. 환경 변수를 사용하고 % I를 찾은 첫 번째 이름의 완전한 이름입니다. 환경 변수 이름이 아닌 경우 정의되었거나 파일이 검색하면이 수정자는 빈 문자열 수정자를 결합하여 복합 결과를 얻을 수 있습니다. % ~ dpI-% I를 드라이브 문자와 경로로만 확장합니다. % ~ nxI-% I를 파일 이름과 확장자로만 확장합니다. % ~ fsI-% I를 짧은 이름 만있는 전체 경로 이름으로 확장합니다. % ~ dp $ PATH : I-PATH에 나열된 디렉토리를 검색합니다. % I에 대한 환경 변수이며 찾은 첫 번째 드라이브 문자 및 경로. % ~ ftzaI-% I를 출력 라인과 같은 DIR로 확장합니다.
pushd
아래
보다 나은 cd
IS pushd
하는 것
D:\...
그래서 pushd %~dp0
좋습니다.
그런 다음 popd
완료되면 전화하는 것이 좋습니다 .
이렇게하면 배치 파일의 작업 디렉토리를 현재 디렉토리로 다시 설정하여 문제를 해결할 수 있습니다.
.bat 스크립트 맨 위에 다음 두 줄을 포함합니다.
@setlocal enableextensions
@cd /d "%~dp0"
위치 : http://www.codeproject.com/Tips/119828/Running-a-bat-file-as-administrator-Correcting-cur
나는 사용한다:
cd % 0 ..
배치 파일의 시작 부분에 배치 파일이 시작된 디렉토리로 디렉토리를 변경합니다.
-Mathew
cd %0/../
👍
이 문제를 해결하려면 .bat 스크립트 맨 위에 다음 두 줄을 포함합니다.
@setlocal enableextensions
@cd /d "%~dp0"
@setlocal enableextensions
@cd / d "% ~ dp0"
여기에서 작동하는 솔루션 :
http://www.vistax64.com/vista-general/79849-run-administrator-changes-default-directory.html
/ F %% I IN ( "% 0")에 대해 BATDIR = %% ~ dpI를 설정하십시오.
ECHO 배치 파일은 % BATDIR % 디렉토리에 있습니다.
%~dp0
직접 사용할 수 있습니다 . for
여기서 호출 할 필요가 없습니다 .