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 脚本中的相对路径的主要内容,如果未能解决你的问题,请参考以下文章