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

高洛峰
Release: 2017-02-14 13:33:50
Original
2419 people have browsed it

%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"
Copy after login

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
Copy after login

Run directly

d.bat , the result is

cd = C:\program
dp0 = C:\program\
Copy after login

Directly run

c.bat, the result is

cd = C:\
dp0 = C:\program\
Copy after login

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"
Copy after login

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"
Copy after login

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"
Copy after login

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!

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template