Computer Hope

Microsoft => Microsoft DOS => Topic started by: optix2000 on April 01, 2008, 09:42:04 PM

Title: %~dp0 vs %cd%
Post by: optix2000 on April 01, 2008, 09:42:04 PM
Hello,

Just wondering what's the difference in using %~dp0 or %cd% to find the current directory, since I'm not sure that either one will work in every case. Or do both work exactly the same?

Thanks.
Title: Re: %~dp0 vs %cd%
Post by: Dias de verano on April 02, 2008, 12:33:19 AM
They are not equivalent.

%cd% is available either to a batch file or at the command prompt and expands to the drive letter and path of the current directory (which can change e.g. by using the CD command)

%~dp0 is only available within a batch file and expands to the drive letter and path in which that batch file is located (which cannot change). It is obtained from %0 which is the batch file's name.

An experiment like the following shows the difference

Here is D:\dirshow.bat:

Code: [Select]
@echo off
echo this is %%cd%%  %cd%
echo this is %%~dp0 %~dp0

Run it from C:\ and this is what you see

Code: [Select]
C:\>D:\dirshow.bat
this is %cd%  C:\
this is %~dp0 D:\
Title: UNC Paths
Post by: mplichta on March 23, 2012, 09:59:01 AM
There is one more important distinction to note.  Normally the command prompt, and therefore cmd files, don't support UNC paths.

However, using %~DP0 you can use relative paths to install software without mapping a drive.  The command below is what I use to install Adobe Design Premium and it works from any path, UNC, Flash drive, or mapped drive.

msiexec /i "%~dp0\DP 32bit Basic\Build\DP 32bit Basic.msi" /q

I use this by typing \\server\share\software\adobe CS5 into the start menu or run command (xp).  From there I can just double click a cmd file containing the command above. 
Title: Re: %~dp0 vs %cd%
Post by: patio on March 23, 2012, 10:00:55 AM
It's been 4 years...
Title: Re: %~dp0 vs %cd%
Post by: OnePostPony on October 18, 2012, 06:51:08 AM
It's been 4 years...

So what? I stumbled upon this thread today and found both replies useful.
Title: Re: UNC Paths
Post by: foxidrive on October 18, 2012, 08:04:36 AM
There is one more important distinction to note.  Normally the command prompt, and therefore cmd files, don't support UNC paths.

I don't think you are correct.

This should work just fine

Code: [Select]
xcopy "\\server\share1\*.txt" "\\server\share2\"
and this too:

Code: [Select]
pushd "\\server\share\software\adobe CS5"
msiexec "\DP 32bit Basic\Build\DP 32bit Basic.msi" /q
popd
Title: Re: %~dp0 vs %cd%
Post by: TechnoGeek on October 18, 2012, 08:14:39 AM
More specifically, cmd.exe (including executed .bat files, .cmd files, etc.) does not support the current/working directory to be a UNC path. pushd gets around this by assigning and switching to a drive letter that is mapped to the target path, and most other programs (commandline or not) work perfectly fine with a UNC path.
Title: Re: %~dp0 vs %cd%
Post by: patio on October 18, 2012, 08:31:09 AM
It's been 4 years...
Title: Re: %~dp0 vs %cd%
Post by: foxidrive on October 18, 2012, 09:23:30 AM
It's been 4 years...

I wonder if this topic will be dredged up again in 2016. ;)
Title: Re: %~dp0 vs %cd%
Post by: patio on October 18, 2012, 09:35:40 AM
Judging by it's history...i'd say that's a safe bet...

Seeya then...
Title: Re: %~dp0 vs %cd%
Post by: rsf722 on September 21, 2015, 12:33:00 PM
Not quite 2016 yet, but I found this very helpful.
Title: Re: %~dp0 vs %cd%
Post by: Geek-9pm on September 21, 2015, 12:57:14 PM
It's been 4 years...
Batch is slow...  ::)
Title: Re: %~dp0 vs %cd%
Post by: Squashman on September 21, 2015, 01:08:37 PM
I wonder if this topic will be dredged up again in 2016. ;)
Close enough.
Title: Re: %~dp0 vs %cd%
Post by: Fighthouse on January 04, 2016, 07:44:41 AM
This thread helped me out with a batch script at the end of last year. Thank you so much!
Title: Re: %~dp0 vs %cd%
Post by: patio on January 04, 2016, 08:00:02 AM
I wonder if this topic will be dredged up again in 2016. ;)

Sonofagun....you were correct.... :P
Title: Re: %~dp0 vs %cd%
Post by: DaveLembke on January 04, 2016, 08:11:08 AM
LOL Like the Matrix Oracle ...would you like a cookie  8)
Title: Re: %~dp0 vs %cd%
Post by: foxidrive on January 05, 2016, 03:01:11 AM
It's had a good run - but I might be 6 foot under in 2020 ;)
Title: Re: %~dp0 vs %cd%
Post by: Nathansswell on February 25, 2017, 02:37:19 PM
I'm just here for 2017, don't mind me.
Title: Re: %~dp0 vs %cd%
Post by: Ciyar on March 15, 2018, 03:37:10 AM
I wonder if this topic will be dredged up again in 2016. ;)

Even after 4 years...... :P :D :D
Title: Re: %~dp0 vs %cd%
Post by: patio on March 17, 2018, 11:18:04 AM
*** sigh ***
Title: Re: %~dp0 vs %cd%
Post by: Squashman on March 17, 2018, 10:03:07 PM
It's had a good run - but I might be 6 foot under in 2020 ;)
RIP my friend.
Title: Re: %~dp0 vs %cd%
Post by: Salmon Trout on March 18, 2018, 04:25:23 AM
As the former Dias de Verano, can I say (a little early) happy 10th anniversary to this thread!
Title: Re: %~dp0 vs %cd%
Post by: patio on March 18, 2018, 07:16:13 AM
Tell good 'ol Diaz i said Hi...... :P
Title: Re: %~dp0 vs %cd%
Post by: Salmon Trout on March 18, 2018, 07:19:25 AM
He says hola, mi amigo!
Title: Re: %~dp0 vs %cd%
Post by: patio on March 18, 2018, 09:07:43 AM
 ;D
Title: Re: %~dp0 vs %cd%
Post by: Geek-9pm on March 18, 2018, 02:16:42 PM
RIP my friend.
When did he pass away?
Title: Re: %~dp0 vs %cd%
Post by: BC_Programmer on March 18, 2018, 02:24:30 PM
Thursday Nov 3rd 2016.

Don's Topic (https://www.computerhope.com/forum/index.php/topic,158835.0.html)

Dostips Topic (https://www.dostips.com/forum/viewtopic.php?f=3&t=7529&p=50015#p50015)
Title: Re: %~dp0 vs %cd%
Post by: Salmon Trout on March 18, 2018, 02:55:05 PM
When did he pass away?
Shortly before you said how sad it was.
Title: Re: %~dp0 vs %cd%
Post by: Geek-9pm on March 18, 2018, 08:51:50 PM
 Foxidrive
Quote
passed away on Thursday 3rd November 2016
My memory is fading.    :-[
Could somebody put a note in his profile?
Title: Re: %~dp0 vs %cd%
Post by: Sefie on November 06, 2019, 01:34:44 AM
It's had a good run - but I might be 6 foot under in 2020 ;)
Not quite 2020, yet, but I registered in late 2019 just to say that this thread was useful to me. ;D
Title: Re: %~dp0 vs %cd%
Post by: djshoxxx on December 18, 2019, 01:40:12 AM
I was trying to understand what @pushd "%~dp0" ment, I googled it, and now I understand it because of this thread. Only 14 days from 2020 lol!

thank you, contributors to this post, and a posthumous thank you and RIP to foxidrive
Title: Re: %~dp0 vs %cd%
Post by: patio on December 18, 2019, 05:56:01 AM
RIP...
Title: Re: %~dp0 vs %cd%
Post by: croger1998 on December 19, 2019, 08:11:48 AM
I have been around PCs all my life. I have been in IT for 20+ years and have never came across %~dp0 before. No idea why. I am glad I came across this post to better understand this hidden gem.

Thanks for the info everyone.

Title: Re: %~dp0 vs %cd%
Post by: martosio on December 31, 2019, 07:27:02 PM
This thread helped me about two years ago (august 2018 @ WTD), but due to thread policy I head to wait until 2020 to reply ;)

Thanks guys!!
Title: Re: %~dp0 vs %cd%
Post by: Caldor on August 05, 2020, 07:54:58 AM
It's been 4 years...
It's been... another 4 years...  ;D

I using a MiSTer FPGA to run a DOS core, and looking into batch scripting, but just cannot figure out how to get the path to the currently active directory.

I cannot get %~dp0 to work either... but trying to experiment some more. I am trying with FreeDOS, DOS 6.22 and DOS 7.1. But I guess I have to make sure I did try all of them.
Title: Re: %~dp0 vs %cd%
Post by: BC_Programmer on August 05, 2020, 01:51:29 PM
%~dp0 and things like %cd% are part of the NT Extensions that were added to the command prompt with Windows NT4.

the "cd" command by itself outputs the current directory, but I don't know a way you can get that into an environment variable without utilizing things like QBASIC.
Title: Re: %~dp0 vs %cd%
Post by: patio on September 10, 2020, 05:17:16 PM
Somehow i knew in the back of my mind it would be Dias ressurecting this one...

Who is that masked man ? ?
Title: Re: %~dp0 vs %cd%
Post by: Sam_Weller on September 30, 2020, 11:51:58 AM

guys help me out?  (https://get-mobdro.com)  (https://get-tubemate.com)

You are not the "former Dias de Verano".
Title: Re: %~dp0 vs %cd%
Post by: Allan on September 30, 2020, 05:34:06 PM
Hey Mike, hope all is well. Good to see you back.
Title: Re: %~dp0 vs %cd%
Post by: Nathansswell on November 14, 2021, 02:50:16 PM
We can forget about 2020 right
Title: Re: %~dp0 vs %cd%
Post by: Sam_Weller on November 27, 2021, 02:40:05 AM
It's been... another 4 years...  ;D

I using a MiSTer FPGA to run a DOS core, and looking into batch scripting, but just cannot figure out how to get the path to the currently active directory.

I cannot get %~dp0 to work either... but trying to experiment some more. I am trying with FreeDOS, DOS 6.22 and DOS 7.1. But I guess I have to make sure I did try all of them.

Resurrection time!

Works with MS-DOS 7 and I have no reason to think it won't work with (say) 6.22

Code: [Select]
@echo off
>temp1.bat echo @PROMPT SET _CD=$P
>temp2.bat command /c temp1.bat
call temp2.bat
del temp1.bat
del temp2.bat
echo currentDir=%_CD%