【问题标题】:relative path in BAT scriptBAT 脚本中的相对路径
【发布时间】: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"

但它不起作用。

【问题讨论】:

    标签: batch-file cmd relative-path drive


    【解决方案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的父目录不同。
        猜你喜欢
        • 1970-01-01
        • 2016-01-09
        • 1970-01-01
        • 2011-05-09
        • 1970-01-01
        • 1970-01-01
        • 2018-09-21
        • 1970-01-01
        • 2015-09-08
        相关资源
        最近更新 更多