Home >Backend Development >Python Tutorial >Detailed explanation of the difference between %cd% and %~dp0 in DOS batch processing

Detailed explanation of the difference between %cd% and %~dp0 in DOS batch processing

高洛峰
高洛峰Original
2017-02-14 13:33:502411browse

%cd% and %~dp0 can both be used to represent the current directory in batch processing under Windows, but their functions are different in different usage scenarios. The following article will give you a detailed introduction to the difference between %cd% and %~dp0 in DOS batch processing. Friends in need can refer to it.

Problem description

Suppose we want to call and execute batch processing b.bat, in batch processing a.bat b.bat needs to know the current location of b.bat and execute run.exe, as follows:

// directory structure
// c:
// -a.bat
// -program
//  -b.bat
//  -run.exe
// a.bat
call "%cd%\program\b.bat"
// b.bat
"%cd%\run.exe"

So can run.exe be executed successfully now?

Problem Analysis

##%cd% and %~dp0 can be used to represent the current directory. However, their functions are different in different usage scenarios:

  • %cd% represents the current working directory (variable);

  • %~dp0 represents the complete directory where the current batch file is located (the batch file's directory, fixed).

Let’s take a look at the following example:

// 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

Run directly

d.bat , the result is

cd = C:\program
dp0 = C:\program\

Directly run

c.bat, the result is

cd = C:\
dp0 = C:\program\

It can be seen from the above results:

  1. When executing

    d.bat, the current working directory is d.bat The directory where is located;

  2. When executing

    c.bat, the current working directory is the directory where c.bat is located, even when calling # After ##d.bat, the working directory is still the directory where c.bat is located.

Problem Solving


Let’s take a look at the problem mentioned in the problem description-whether it can be executed successfully

What about run.exe

? The answer is: No. "

%cd%\run.exe

" means "C:\run.exe", not "C:\program\run.exe" . So how to change it? There are two solutions:

// 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"

Extension of the problem


The above solution Plan A in the solution solves this problem by changing the current directory. However, there is another problem here. Let us look at the following example:

// 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"

Now

e.bat

and f.bat are no longer in the same drive letter. Switch the current working directory from e.bat to f.bat directly. It is not possible to use CD, you must use:

cd /d "%~dp0"

This is an easy place to overlook, remember not to make a mistake.

Summary of the problem


Let’s reiterate the difference between

%~dp0

and %cd%, %cd% and %~dp0 can both be used to represent the current directory, but their functions are different in different usage scenarios:

  • %cd%

    represents the current working directory (variable);

  • %~dp0

    represents the current The complete directory where the batch file is located (the batch file's directory, fixed).

  • Judging from our current usage, try to use
%~dp0

. It is not recommended to use %cd%, unless there are other needs. . For more detailed explanations of the differences between %cd% and %~dp0 in DOS batch processing, please pay attention to the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn