DOS 일괄 처리에서 %cd%와 %~dp0의 차이점에 대한 자세한 설명

高洛峰
풀어 주다: 2017-02-14 13:33:50
원래의
2395명이 탐색했습니다.

Windows의 일괄 처리에서는 %cd%와 %~dp0을 모두 사용하여 현재 디렉터리를 나타낼 수 있지만 사용 시나리오에 따라 기능이 다릅니다. 다음 기사에서는 DOS 일괄 처리에서 %cd%와 %~dp0의 차이점에 대해 자세히 소개합니다.

문제 설명

일괄 처리 a.bat에서 일괄 처리 b.bat를 호출하여 실행한다고 가정합니다. b.batb.bat에 대해 알아야 합니다. 🎜> 현재 위치에서 run.exe을 다음과 같이 실행합니다.

// directory structure
// c:
// -a.bat
// -program
//  -b.bat
//  -run.exe
// a.bat
call "%cd%\program\b.bat"
// b.bat
"%cd%\run.exe"
로그인 후 복사

그럼 이제 run.exe를 성공적으로 실행할 수 있을까요?

문제 분석

%cd%%~dp0은 모두 현재 디렉터리를 나타내는 데 사용할 수 있지만 해당 기능은 사용 시나리오에 따라 다릅니다. 동일:

  • %cd%은 현재 작업 디렉터리(변수)를 나타냅니다.

  • %~dp0은 배치가 있는 현재 전체 디렉터리를 나타냅니다. 파일이 위치합니다(배치 파일의 디렉터리, 고정됨).

다음 예를 살펴보겠습니다.

// directory structure
// c:
// -c.bat
// -program
//  -d.bat
// c.bat
call "%cd%\program\d.bat"
// d.bat
@echo off
echo cd = %cd%
echo dp0 = %~dp0
로그인 후 복사

d.bat를 직접 실행하고, 결과는

cd = C:\program
dp0 = C:\program\
로그인 후 복사

c.bat를 직접 실행하면 결과는

cd = C:\
dp0 = C:\program\
로그인 후 복사

입니다. 위 결과에서 알 수 있듯이

  1. d.bat을 실행할 때 현재 작업 디렉터리는 d.bat

    <일 때
  2. 이 위치한 디렉터리입니다. 🎜>
  3. 을 실행합니다. 현재 작업 디렉터리는 c.bat을 호출한 후에도 여전히 c.bat이 있는 디렉터리입니다. d.batc.bat

문제 해결


문제 설명에 언급된 문제를 살펴보겠습니다. - 성공적으로 실행할 수 있는지 여부

모직물?

run.exe답은: 아니요. "

"은 "

"이 아니라 "%cd%run.exe"을 의미합니다. 그럼 어떻게 바꾸나요? C:run.exeC:programrun.exe두 가지 해결책이 있습니다:

// plan A
// change the current working directory
// a.bat
cd "%~dp0"
call "%cd%\program\b.bat"
// b.bat
cd "%~dp0"
"%cd%\run.exe"
// plan B
// using %~dp0 directly
// a.bat
call "%~dp0program\b.bat"
// b.bat
"%~dp0run.exe"
로그인 후 복사

문제 확장


위의 해결책 솔루션의 플랜 A는 현재 디렉터리를 변경하여 이 문제를 해결합니다. 그러나 여기에는 또 다른 문제가 있습니다.

// directory structure
// c:
// -program
//  -f.bat
// d:
// -e.bat
// plan A
// change the current working directory
// e.bat
cd "%~dp0"
call "c:\program\f.bat"
// f.bat
cd "%~dp0"
"%cd%\run.exe"
로그인 후 복사

은 더 이상 동일한 드라이브 문자에 없습니다. cd를 사용하여 현재 작업 디렉터리를 e.bat에서 f.bat로 전환하는 것은 불가능합니다. e.batf.bat

cd /d "%~dp0"
로그인 후 복사
를 사용해야 합니다.

간과하기 쉬운 곳이니 실수하지 마세요.

문제 요약


의 차이점을 다시 말씀드리자면 %~dp0%cd%을 모두 사용할 수 있습니다. 현재 상황을 표현하지만 해당 기능은 사용 시나리오에 따라 다릅니다. %cd%%~dp0

는 현재 작업 디렉터리(변수)를 나타냅니다.
  • 은 현재 배치 파일이 있는 전체 디렉토리(배치 파일 디렉토리, 고정)를 나타냅니다.

    %cd%

  • 현재 사용법으로 볼 때
  • 를 사용해 보시고, 다른 필요가 없는 한

    은 사용하지 않는 것이 좋습니다. %~dp0

    DOS 일괄처리에서 %cd%와 %~dp0의 차이점에 대한 더 자세한 설명은 PHP 중국어 홈페이지를 참고해주세요!
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿