BAT 脚本中的相对路径

Posted

技术标签:

【中文标题】BAT 脚本中的相对路径【英文标题】:relative path in BAT script 【发布时间】:2013-02-02 21:39:55 【问题描述】:

这是我 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"

但它不起作用。

【问题讨论】:

【参考方案1】:

在你的批处理文件中使用它:

%~dp0\bin\Iris.exe

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

【讨论】:

实际上这可以解析为C:\myDir\\bin\Iris.exe(注意双反斜杠)。这仍然有效,但在 bin 似乎“更干净”之前去掉反斜杠? --> %~dp0bin\Iris.exe. @mozzbozz 如果你能保证%~dp0 总是有一个尾随反斜杠,那么这两个语句都可以工作。否则带有额外反斜杠的那个是更安全的变体。 好的,这就是重点。我只在两台不同的 Windows 7 机器上对此进行了测试,其他地方可能不同(XP、Vista 或 Windwos 8 --> 我不知道,但是:微软逻辑,我找不到任何关于它的文档;))。但是,我发现我必须在它周围加上引号 ("%~dp0\bin\Iris.exe"),因为路径中有一个空格:) 只是为了真正确保它适用于每台计算机。 您可以确保在SET "scriptdir=%~dp0" 和下一行IF NOT "%scriptdir:~-1%"=="\" SET "scriptdir=%scriptdir%\" 上有反斜杠。我见过路径中间的双反斜杠破坏软件的事件。【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

你应该可以使用当前目录

"%CD%"\bin\Iris.exe

【讨论】:

当当前目录不是Program时会失败,当你在资源管理器中双击run.bat时会发生这种情况。 %CD% 是当前目录 %~dp0 是批处理文件本身的目录【参考方案5】:

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

【讨论】:

bin\Iris.exe 它不工作 :( 我不喜欢使用 root,因为有一天我可能会将这个目录移动到另一个位置。如果我从操作系统询问怎么办当前的绝对路径?我将使用它在 bin 中启动 exe? 我假设当前驱动器是 U 盘的驱动器,当前文件夹是 \Program - 不是这样吗?在尝试运行 .exe 之前,您可以在该行中使用简单的 cd 命令来证明这一点 仅仅使用相对路径不一定有效。该路径将相对于当前工作目录,可能与run.bat的父目录不同。

以上是关于BAT 脚本中的相对路径的主要内容,如果未能解决你的问题,请参考以下文章

jmeter参数化----绝对路径&相对路径

从相对路径和/或文件名解析绝对路径

perl 中的相对文件路径

【JMeter05】参数化之绝对路径&相对路径

Tomcat通过setenv.bat指定jdk和jre(相对路径)

如何包含具有相对路径的 bash 脚本? [复制]