BAT脚本中的相对路径

use*_*037 118 cmd batch-file relative-path drive

这是我的USB驱动程序上自己的程序文件夹:

Program\
     run.bat
     bin\
         config.ini
         Iris.exe
         library.dll
         etc.
Run Code Online (Sandbox Code Playgroud)

我想用run.bat启动我的Iris.exe

我不能用这个:F:/Program/bin/Iris.exe就像一个快捷方式,因为有时,它不会给我F驱动程序名称(E,G)

我需要写入bat文件才能像魅力一样工作?我在BAT文件中尝试过:

"\bin\Iris.exe"
Run Code Online (Sandbox Code Playgroud)

它不工作:(

Ans*_*ers 259

在批处理文件中使用它:

%~dp0\bin\Iris.exe
Run Code Online (Sandbox Code Playgroud)

%~dp0 解析为批处理脚本所在的文件夹的完整路径.

  • @mozzbozz如果你能保证`%~dp0`总是有一个尾部反斜杠,那么两个语句都可以.否则带有额外反斜杠的那个是更安全的变体. (8认同)
  • 实际上这解决了类似`C:\ myDir \\ bin\Iris.exe`(注意双反斜杠).这仍然有效但在bin之前留下反斜杠似乎"更干净"? - >`%~dp0bin\Iris.exe`. (4认同)
  • 它应该标记为问题的正确答案 (4认同)
  • 好的,这是重点.我只是在两台不同的Windows 7机器上进行了测试,在其他地方可能会有所不同(XP,Vista或者Windwos 8 - >我不知道但是:Microsoft逻辑,我找不到任何关于它的文档;)).但是,我发现我必须在它周围加上引号("%~dp0\bin\Iris.exe"`),因为路径中有一个空格:)只是为了*真的*确定它适用于每台计算机. (3认同)
  • 您可以使用`SET "scriptdir=%~dp0"`来确保有反斜杠,并在下一行使用`IF NOT "%scriptdir:~-1%"=="\" SET "scriptdir=%scriptdir%\"`。我见过路径中间的双反斜杠破坏软件的事件。 (2认同)

小智 36

您可以使用以下代码获取所有必需的文件属性:

FOR %%? IN (file_to_be_queried) DO (
    ECHO File Name Only       : %%~n?
    ECHO File Extension       : %%~x?
    ECHO Name in 8.3 notation : %%~sn?
    ECHO File Attributes      : %%~a?
    ECHO Located on Drive     : %%~d?
    ECHO File Size            : %%~z?
    ECHO Last-Modified Date   : %%~t?
    ECHO Parent Folder        : %%~dp?
    ECHO Fully Qualified Path : %%~f?
    ECHO FQP in 8.3 notation  : %%~sf?
    ECHO Location in the PATH : %%~dp$PATH:?
)
Run Code Online (Sandbox Code Playgroud)


小智 19

我发现%CD%给出了调用脚本的路径,而不是脚本的路径,但是,%~dp0它将给出脚本本身的路径.


Joh*_* A. 12

您应该能够使用当前目录

"%CD%"\BIN\Iris.exe


AjV*_*Jsy 5

要么 bin\Iris.exe (没有前导斜杠 - 因为这意味着从根开始)
\Program\bin\Iris.exe(完整路径)