我有一个庞大的批处理文件,我将其分成几个较小的文件,其中一个主文件分别调用每个较小的文件。为了整洁,我将各个脚本放在项目文件夹的子文件夹中(主脚本在项目文件夹中)。
然而这引起了一个问题 - 我无法弄清楚如何更改新单个脚本中的某些路径。这大概是什么布局:
Project
|---MasterScript.bat
|
|---Scripts
| |---scriptA.bat
|
|---Exes
| |---program.exe
| |---config.xml
因此,主脚本调用每个批处理脚本 - A
和脚本A
使用参数program.exe
调用/config config.xml
。
问题是如何处理program.exe
和config.xml
。
遗憾的是,我刚刚将这些脚本整合到一起,却不知道如何解析批处理文件路径,因此根本不知道如何使用父文件夹等关系编写相对路径。
所以基本上我一般都在询问如何编写相对批处理路径,特别是如何编写这些路径。
答案 0 :(得分:2)
%~dp0
扩展为参数0的驱动器和路径,这是批处理文件本身。此文件路径引用始终扩展为带反斜杠的路径。使用仅包含
@echo off
echo Batch file path is: "%~dp0"
pause
在几个显示页面的命令提示符窗口中运行call /?
的帮助输出中描述了如何在没有或带有修饰符的情况下引用批处理文件的参数(参数,选项)。
短相对路径教程:
以目录名或文件名开头的路径与当前目录相关。
以.\
开头的路径也与当前目录相关。
以..\
开头的路径引用当前目录的父目录。
仅以\
开头的路径相对于当前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 的详细信息,请在命令提示符窗口for /?
中运行,并仔细阅读输出帮助页面。