[windows] ‘관리자 권한으로 실행’시 Windows 배치 파일 시작 디렉터리

디렉토리에 배치 파일이 있으며이 디렉토리 내의 파일을 업데이트하기 때문에 거기에서도 실행되어야합니다.
사용자가 관리자 권한으로 배치 파일을 실행하는 경우를 제외하고는 완벽하게 작동합니다 (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로 확장합니다.


답변

보다 나은 cdIS 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”