

However, %~p0, %~n0, %~nx0 and %~x0 may come in handy, should you be interested in path (without driveletter), filename (without extension), full filename with extension or filename's extension only. %~f1 will work independent of how you did specify your first argument: with relative paths or with absolute paths (if you don't specify the file's extension when naming %1, it will not be added, even if you use %~dpnx1 - however.īut how on earth would you name a file on a different drive anyway if you wouldn't give that full path info on the commandline in the first place?


The documentation for the set of modifiers allowed on a batch argument can be found here: you'll observe the following output: %~dp0 is "C:\temp\" If you save this as c:\temp\example.bat and the run it from c:\Users\Public asĬ:\Users\Public>\temp\example.bat. Rem Temporarily change the current working directory, to retrieve a full path

Here's an example that'll demonstrate each of these techniques: off If you need to support both relative and absolute paths, you can make use of Frédéric Ménez's solution: temporarily change the current working directory. It does have a shortcoming though: it miserably fails if the first argument is fully-qualified. Personally, I often use the %~dp0%~1 idiom in my batch file, which interpret the first argument relative to the path of the executing batch. You can also get the fully qualified path of your first argument by using %~f1, but this gives a path according to the current working directory, which is obviously not what you want. You can use %~dp0 to get only the path portion of the 0th argument (which is the current script) - this path is always a fully qualified path. In batch files, as in standard C programs, argument 0 contains the path to the currently executing script.
