What does %~d0 mean in a Windows batch file?

Chris Smith picture Chris Smith · Sep 21, 2008 · Viewed 340.1k times · Source

I'm looking at a batch file which defines the following variables:

set _SCRIPT_DRIVE=%~d0
set _SCRIPT_PATH=%~p0
  • What do %~d0 or %~p0 actually mean?
  • Is there a set of well-known values for things like current directory, drive, parameters to a script?
  • Are there any other similar shortcuts I could use?

Answer

JacquesB picture JacquesB · Sep 21, 2008

The magic variables %n contains the arguments used to invoke the file: %0 is the path to the bat-file itself, %1 is the first argument after, %2 is the second and so on.

Since the arguments are often file paths, there is some additional syntax to extract parts of the path. ~d is drive, ~p is the path (without drive), ~n is the file name. They can be combined so ~dp is drive+path.

%~dp0 is therefore pretty useful in a bat: it is the folder in which the executing bat file resides.

You can also get other kinds of meta info about the file: ~t is the timestamp, ~z is the size.

Look here for a reference for all command line commands. The tilde-magic codes are described under for.