'관리자 권한으로 실행'시 Windows 배치 파일 시작 디렉터리


81

디렉토리에 배치 파일이 있으며이 디렉토리 내의 파일을 업데이트하기 때문에 거기에서도 실행되어야합니다.
사용자가 관리자 권한으로 배치 파일을 실행하는 경우를 제외하고는 완벽하게 작동합니다 (Vista에 필요). 그러면 시작 디렉터리는 C : \ Windows \ System32입니다.

배치 파일이 실행 된 디렉토리를 알 수있는 방법이 있습니까?
사용자가 디렉토리를 수동으로 입력하는 것을 원하지 않습니다.

답변:


114

다음과 같이 배치 파일 경로에 액세스하십시오.

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로 확장합니다.

환상적입니다. 저는 이걸 몰랐습니다. 감사합니다
Marc

얼마나 애매한가! 그러나 정확히 내가 필요한 것. 감사.
stucampbell

1
@stucampbell 'for /?'명령을 시도하십시오. 작동 방식에 대한 자세한 설명을 얻으려면 (4 페이지로 스크롤)
Martin

도니 V 시도 pushd아래
nwgat

@Donny V는 Windows 8.1에서 작동합니다. 이것은 배치 파일 내에서 실행하는 경우에만 작동합니다.
Martin

51

보다 나은 cdIS pushd하는 것

  • 다음에서 시작하는 경우 드라이브 문자 변경 D:\...
  • UNC 네트워크 경로에있는 경우 드라이브 문자 할당

그래서 pushd %~dp0좋습니다.

그런 다음 popd완료되면 전화하는 것이 좋습니다 .


여러 볼륨이있는 시스템을위한 훌륭한 솔루션이며 Windows 7, 8, 8.1 및 10에서 작동합니다. +1
Bit Fracture

30

이렇게하면 배치 파일의 작업 디렉토리를 현재 디렉토리로 다시 설정하여 문제를 해결할 수 있습니다.

.bat 스크립트 맨 위에 다음 두 줄을 포함합니다.

@setlocal enableextensions
@cd /d "%~dp0"

위치 : http://www.codeproject.com/Tips/119828/Running-a-bat-file-as-administrator-Correcting-cur


1
이것은 완벽 해요. 관리자 권한으로 bat 파일을 실행할 때 "파일을 찾을 수 없음"문제를 해결했습니다.
PNDA

1

나는 사용한다:

cd % 0 ..

배치 파일의 시작 부분에 배치 파일이 시작된 디렉토리로 디렉토리를 변경합니다.

-Mathew


1
드라이브 문자는 변경되지 않습니다.
Jorge Fuentes González

이것은 실제로 최상의 솔루션입니다. cd %0/../👍
St3ve R0nix


0

부모를 추가하여 파일 이름에서 직접 CD를 만들 수 있습니다 (Windows 8.x에서는 테스트되지 않았지만 내가 기억하는 한 "영원히"작동했습니다).

CD %FILENAME%\..

CD는 위에 표시되었지만 명시 적으로 언급되지 않은 / D를 사용하여 드라이브도 변경하므로 놓칠 수 있습니다. CD / D % FILENAME % \ ..

(FOR /? IF /? SET /? CALL /? GOTO /? 모두 cmd.exe를 사용하면 매우 유용한 읽기 기능을 제공하므로 가끔씩 다시 읽습니다.)


0

@setlocal enableextensions

@cd / d "% ~ dp0"


3
Syed Abdul Haseeb, 이것이 도움이되거나 전혀 효과가 있는지 의심합니다. 저를 설득하기 위해 이것이 어떻게 작동하고 왜 도움이되는지에 대한 설명을 추가하십시오. 그것은 StackOverflow가 무료 프로그래밍 서비스를 제공하는 오해와 싸우는 데 도움이 될 것입니다.
Yunnosch

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.