如何调用当前目录中一级的批处理文件?

时间:2014-07-13 12:35:18

标签: batch-file call

我在folder1/folder2/file.bat

中使用批处理文件

父文件夹folder1中有一个批处理文件,我想通过file.bat打开

我尝试过使用:

start ..\..\code.bat

但是这会导致错误消息,因为找不到文件。

有什么想法吗?

4 个答案:

答案 0 :(得分:16)

我想更好地解释一下示例应该使用什么,因为到目前为止发布的答案仅适用于当前工作目录是包含批处理文件file.bat的目录。

目录结构如下:

  • C:\
    • 温度
      • 文件夹1
        • 文件夹2
          • Example.bat
        • Parent.bat

当使用

执行Example.bat时,当前工作目录 C:\ Temp
"Folder 1\Folder 2\Example.bat"

"C:\Temp\Folder 1\Folder 2\Example.bat"

批处理文件Parent.bat包含例如:

echo %0 is active.
pause

批处理文件Example.bat已包含:

@echo off
echo Calling Parent.bat ...
rem How to run Parent.bat here?
echo %0 is active.
pause

此方案中真正有效的解决方案是当前工作目录与包含Example.bat的目录不同的目录,如下所示。


使用 Parent.bat

继续批处理
"%~dp0..\Parent.bat"

%0在执行批处理文件时引用参数0,该文件始终是在启动批处理文件时在父进程中指定的批处理文件的名称。

但是想要的是没有双引号的批处理文件的驱动器和路径。因此,表达式%~dp0用于从参数0获取 C:\ Temp \ Folder 1 \ Folder 2 \

在此路径中追加字符串 .. \ Parent.bat ,并附加整个新文件名
由于空格的原因, C:\ Temp \ Folder 1 \ Folder 2 \ .. \ Parent.bat 用双引号括起来。

处理Example.bat完成后,Parent.bat没有返回。


像子程序

一样调用 Parent.bat
call "%~dp0..\Parent.bat"

命令调用导致在同一命令进程(控制台窗口)中执行批处理文件Parent.bat,暂停执行Example.bat直到Parent.bat完成。< / p>

Example.bat处理完成后,Parent.bat中的下一行继续执行批处理。

<强>例外:
Parent.bat包含不带开关exit的命令/B,因为这会立即退出命令行解释器cmd.exe处理Example.batParent.bat

在命令提示符窗口中执行call /?help call,以获取有关命令调用的简短帮助。


Parent.bat 作为并行进程

启动
start "Parent Batch" "%~dp0..\Parent.bat"

命令启动,没有任何参数,可选标题除外导致批处理文件Parent.bat在单独的控制台窗口中通过单独的命令进程执行,而不会停止执行{{ 1}}。

因此,两个批处理文件同时运行(或多或少)。

注意:
命令 start 将双引号中的第一个字符串解释为title。因此,当要启动批处理文件或应用程序时,必须在双引号中明确定义标题,或者由于1个或多个空格,必须在双引号中指定已启动的批处理文件/应用程序的任何参数。

在命令提示符窗口中执行Example.batstart /?,以获取有关命令开始的简短帮助。


Parent.bat 称为单独的流程

help start

带有可选参数start "Parent Batch" /wait "%~dp0..\Parent.bat" 的命令 start 会导致已启动的批处理文件/应用程序作为单独的进程(批处理文件或控制台应用程序的其他控制台窗口)执行,但会暂停执行当前批处理文件直到启动进程(在新控制台窗口中执行的Windows应用程序或批处理文件/控制台应用程序)终止。

答案 1 :(得分:10)

你可以:

cd..
start Code.bat

这将从其自己的目录

启动code.bat

答案 2 :(得分:9)

..\用于提升一级。你的情况需要两级 尝试:

start ..\..\code.bat

答案 3 :(得分:3)

尝试使用它:

start ../code.bat