How do I find the current directory of a batch file, and then use it for the path?

后端 未结 4 1759
悲哀的现实
悲哀的现实 2020-11-29 04:12

I have a batch file that I intend to distribute to our customers to run a software task.

We distribute them as a folder or .zip with the files inside.

相关标签:
4条回答
  • 2020-11-29 04:45

    You can also do

     Pushd "%~dp0"
    

    Which also takes running from a unc path into consideration.

    0 讨论(0)
  • 2020-11-29 04:47

    There is no need to know where the files are, because when you launch a bat file the working directory is the directory where it was launched (the "master folder"), so if you have this structure:

    .\mydocuments\folder\mybat.bat
    .\mydocuments\folder\subfolder\file.txt
    

    And the user starts the "mybat.bat", the working directory is ".\mydocuments\folder", so you only need to write the subfolder name in your script:

    @Echo OFF
    REM Do anything with ".\Subfolder\File1.txt"
    PUSHD ".\Subfolder"
    Type "File1.txt"
    Pause&Exit
    

    Anyway, the working directory is stored in the "%CD%" variable, and the directory where the bat was launched is stored on the argument 0. Then if you want to know the working directory on any computer you can do:

    @Echo OFF
    Echo Launch dir: "%~dp0"
    Echo Current dir: "%CD%"
    Pause&Exit
    
    0 讨论(0)
  • 2020-11-29 04:59

    ElektroStudios answer is a bit misleading.

    "when you launch a bat file the working dir is the dir where it was launched" This is true if the user clicks on the batch file in the explorer.

    However, if the script is called from another script using the CALL command, the current working directory does not change.

    Thus, inside your script, it is better to use %~dp0subfolder\file1.txt

    Please also note that %~dp0 will end with a backslash when the current script is not in the current working directory. Thus, if you need the directory name without a trailing backslash, you could use something like

    call :GET_THIS_DIR
    echo I am here: %THIS_DIR%
    goto :EOF
    
    :GET_THIS_DIR
    pushd %~dp0
    set THIS_DIR=%CD%
    popd
    goto :EOF
    
    0 讨论(0)
  • 2020-11-29 05:00

    Try in yourbatch

    set "batchisin=%~dp0"
    

    which should set the variable to your batch's location.

    0 讨论(0)
提交回复
热议问题