2017-08-08 211 views
1

我有一个大量的批处理文件,我分成几个较小的文件,一个主文件分别调用每个较小的文件。为了整洁,我将各个脚本放置在项目文件夹的子文件夹中(主脚本位于项目文件夹中)。获取父级子文件夹的相对路径

但是,这已经造成了一个问题 - 我无法弄清楚如何改变新的单独脚本中的某些路径。这里是大约什么布局,如:

Project 
|---MasterScript.bat 
| 
|---Scripts 
| |---scriptA.bat 
| 
|---Exes 
| |---program.exe 
| |---config.xml 

所以主脚本调用每个批处理脚本的 - A和脚本A与参数/config config.xml调用program.exe

问题是如何解决program.exe和​​3210。

不幸的是,我不知道如何解决这些批处理文件路径的问题,所以从字面上不知道如何使用父文件夹等关系编写相对路径。

所以基本上我总是问如何编写相关批处理路径,特别是如何编写这些路径。

+0

在批处理脚本'scriptA.bat'中写'〜dp0 .. \ Exes \ program.exe'指向'program.exe';在命令提示符窗口中输入'call /?'来查找'%〜dp0'的含义。 – aschipfl

回答

0

%~dp0扩展到参数0的驱动器和路径,它是批处理文件本身。此文件路径引用始终扩展为带反斜杠的路径。试用它与仅含有

@echo off 
echo Batch file path is: "%~dp0" 
pause 

如何引用一个批处理文件的参数(参数,选项)在有或无改性剂帮助输出被描述在几个显示装置上运行的一个命令提示窗口call /?一个批处理文件页面。

短期相对路径教程:

  1. 路径开始与目录或文件名的名称是相对于当前目录

  2. .\开头的路径也相对于当前目录

  3. ..\开头的路径引用当前目录的父目录

  4. \开始的路径相对于当前DRIVE的根目录。
    例如,\Windows在当前驱动器的根目录中引用目录Windows,而不依赖于当前目录是哪个目录。

.\..\也可以用一个或更多次的路径中几乎任何地方。 .\..\不能用于驱动字母和冒号,因为这意味着在当前目录或父目录中指定了一个目录,其中包含名称不可用的冒号。

按顺序使用..\..\或甚至更多..\有助于在相对于当前目录的目录结构中向上引用2个或多个目录。

在刚刚运行的应用程序上使用~dp0..\Exes\program.exe绝对有效。

在传递给应用程序或脚本的参数中引用具有绝对路径组件和相对路径组件的混合的其他目录或文件也没有问题。

但是,如果在将目录或文件名与路径传递给应用程序或脚本之前,通过纯相对路径或绝对路径和相对路径的混合确定真正的绝对完整路径,以获得更好的可读警告并且包含传递的目录/文件名称的错误消息。

命令FOR可用于从相对路径或绝对路径和相对路径的混合中获取目录或文件的完整路径。

例子:

@echo off 
for /F %%I in ("%~dp0..\Exes") do set "FullExesPath=%%~fI" 
echo Path to project executables: "%FullExesPath%" 
pause 

注:没有在这个解决路径的末尾没有反斜杠。在文件引用中使用%FullExesPath%时,必须在此目录引用和文件名之间键入反斜杠,以便字符串更易于阅读。

有关命令的详细信息对于在命令提示符窗口for /?中运行并仔细阅读输出帮助页面。