Home >Backend Development >Python Tutorial >Detailed explanation of the difference between %cd% and %~dp0 in DOS batch processing
%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).
// directory structure // c: // -c.bat // -program // -d.bat // c.bat call "%cd%\program\d.bat" // d.bat @echo off echo cd = %cd% echo dp0 = %~dp0Run 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:
d.bat, the current working directory is
d.bat The directory where is located;
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.
Let’s take a look at the problem mentioned in the problem description-whether it can be executed successfully
? The answer is: No. "
" 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
and %cd%
, %cd%
and %~dp0
can both be used to represent the current directory, but their functions are different in different usage scenarios:
represents the current working directory (variable);
represents the current The complete directory where the batch file is located (the batch file's directory, fixed).
. 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!