Saturday, January 29, 2011

Change Current Directory to the Batch File Directory

I have a bat file on windows that execute a procdump operation. The issue with the batch file is that I need to cd to the batch file directory first before executing the job, or else the script won't work.

How to change to the current batch file directory?

I tried the following code in my procdump.bat:

cd "%~dp"
procdump -h devenv.exe mydump.txt

But it failed, the error message is:

The following usage of the path operator in batch-parameter substitution is invalid: %~dp"

For valid formats type CALL /? or FOR /?

Edit: The answer provided is working, but there is only one catch: if my current directory is different than the batch file directory, then I would get a "The system cannot find the path specified". Anyone has any ideas?

This is a screenshot of the error:

alt text

  • Ok, I think I found here what you mean with %~dp.

    I think what you really want to do is this:

    cd "%~dp0" /D
    

    (!) But note that this will still not give you the right behaviour when you're trying to execute your batch while the current directory is on another drive as cd doesn't change the active drive.

    Edit: Apparently (thanks @Yoopergeek) you can add the /D parameter to the cd command to let it also change the active drive.

    Dennis Williamson : For more information on these batch parameters, see `help call` at a `cmd` prompt.
    Dennis Williamson : By the way, you can combine those parameters like this: `%~dp0`
    fretje : @Dennis: Thanks! Updated my answer.
    Ngu Soon Hui : Your answer is helpful; but if my current directory is at a different directory that the batch file, then the above command will fail; even `cd /D` or `cd "%~dp0" /D` can't help.
    fretje : @Ngu Soon Hui: That your current dir is at a different dir than the batch file was obvious. But why would that command fail? I've tested it here and it works.
    Ngu Soon Hui : I don't know, very weird.
    Ngu Soon Hui : I've found the solution by using `cd /D "%~dp0"`. Thanks.
    From fretje
  • I'd leave a comment to fretje's answer, but evidently I can't???


    Anyway, regarding the note:
    But note that this will still not give you the right behaviour when you're trying to execute your batch while the current directory is on another drive as cd doesn't change the active drive.


    Use the /D switch in your CD command, and CD will change the active drive.

    Yoopergeek : ...yet I can comment on my own answer. Man, sucks to have no rep on ServerFault...wish some SO rep 'bled' over to here.
    fretje : @Yoopergeek: you can associate your accounts. That'll give you 100 rep here if your rep on SO is higher than 200.
    fretje : Btw: Thanks, I'll update my answer ;-)
    From Yoopergeek

0 comments:

Post a Comment