디렉토리에 배치 파일이 있으며이 디렉토리 내의 파일을 업데이트하기 때문에 거기에서도 실행되어야합니다.
사용자가 관리자 권한으로 배치 파일을 실행하는 경우를 제외하고는 완벽하게 작동합니다 (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로 확장합니다.
답변
보다 나은 cd
IS pushd
하는 것
- 다음에서 시작하는 경우 드라이브 문자 변경
D:\...
- UNC 네트워크 경로에있는 경우 드라이브 문자 할당
그래서 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
답변
이 문제를 해결하려면 .bat 스크립트 맨 위에 다음 두 줄을 포함합니다.
@setlocal enableextensions
@cd /d "%~dp0"
답변
부모를 추가하여 파일 이름에서 직접 CD를 만들 수 있습니다 (Windows 8.x에서는 테스트되지 않았지만 내가 기억하는 한 “영원히”작동했습니다).
CD %FILENAME%\..
CD는 위에 표시되었지만 명시 적으로 언급되지 않은 / D를 사용하여 드라이브도 변경하므로 놓칠 수 있습니다. CD / D % FILENAME % \ ..
(FOR /? IF /? SET /? CALL /? GOTO /? 모두 cmd.exe를 사용하면 매우 유용한 읽기 기능을 제공하므로 가끔씩 다시 읽습니다.)
답변
@setlocal enableextensions
@cd / d “% ~ dp0”