BAT脚本中的相对路径


130

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

Program\
     run.bat
     bin\
         config.ini
         Iris.exe
         library.dll
         etc.

我想用run.bat开始 Iris.exe

我不能使用它:F:/Program/bin/Iris.exe像快捷方式一样,因为有时它不作为驱动器附加F:例如 E:G:

无论驱动器号如何,我都需要在bat文件中写什么才能工作?

我在BAT文件中尝试过此操作:

"\bin\Iris.exe"

但这是行不通的。

Answers:


275

在批处理文件中使用此命令:

%~dp0\bin\Iris.exe

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


7
实际上,这可以解决类似问题C:\myDir\\bin\Iris.exe(请注意双反斜杠)。这仍然有效,但是在bin看起来“更干净”之前就留下反斜杠了吗?-> %~dp0bin\Iris.exe
mozzbozz 2014年

8
@mozzbozz如果可以保证%~dp0始终带有反斜杠,则这两个语句都将起作用。否则,带有附加反斜杠的是更安全的变体。
Ansgar Wiechers,2014年

4
好的,这就是重点。我仅在两台不同的Windows 7计算机上进行了测试,其他地方可能有所不同(XP,Vista或Windwos 8->我不知道,但是:Microsoft逻辑,我找不到关于它的任何文档;))。然而,我发现,我只好把引号围绕它("%~dp0\bin\Iris.exe")作为路径它:)只要有一个空格要真正确保它工作在每台计算机上。
mozzbozz 2014年

1
您可以确保SET "scriptdir=%~dp0"在下一行使用和进行反斜杠IF NOT "%scriptdir:~-1%"=="\" SET "scriptdir=%scriptdir%\"。我已经看到过这样的事件:路径中间的双反斜杠破坏了软件。
LogicDaemon

40

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

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:?
)

24

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


14

您应该可以使用当前目录

“%CD%” \ bin \ Iris.exe


1
当当前目录不是时Program,此操作将失败run.bat,在资源管理器中双击时会发生。%CD%是当前目录%~dp0是批处理文件本身的目录
jeb

5

无论是 bin\Iris.exe (没有斜线-因为这意味着从根开始右)
\Program\bin\Iris.exe(完整路径)


1
bin \ Iris.exe它不起作用:(我不喜欢使用root,因为有朝一日也许我会将这个目录移动到另一个位置。如果我从OS询问当前的绝对路径该怎么办?我会使用在bin中启动exe文件?
user2083037 2013年

我以为当前驱动器将是USB记忆棒的驱动器,而当前文件夹将是\Program-不是吗?cd在尝试运行.exe之前,您可以在一行中显示一个简单的命令
AjV Jsy 2013年

简单地使用相对路径不一定有效。该路径将相对于当前工作目录,该路径可能与的父目录不同run.bat
Ansgar Wiechers
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.