如何调用当前目录中上一级的batch file?

我正在使用folder1/folder2/file.bat的batch file

父文件夹folder1有一个batch file,我想通过file.bat打开

我曾尝试使用:

 start ..\..\code.bat 

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

有任何想法吗?

你可以只是:

 cd.. start Code.bat 

这将从它自己的目录开始code.bat

我想解释一下如何使用一个例子,因为到目前为止所发布的答案只能用当前工作目录作为包含batch filefile.bat的目录。

有一个目录结构如下:

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

当前的工作目录是用C:\ Temp执行Example.bat

 "Folder 1\Folder 2\Example.bat" 

或与

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

batch fileParent.bat包含例如:

 echo %0 is active. pause 

batch fileExample.bat已经包含:

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

当前工作目录与包含Example.bat目录不同的目录在这种情况下真正可行的解决scheme如下所示。


Parent.bat继续批处理

 "%~dp0..\Parent.bat" 

执行batch file时%0引用参数0,batch file始终是batch file的父进程中指定的batch file的名称。

但是想要的是没有双引号的batch file的驱动器和path。 因此,expression式%~dp0用于从参数0中获取C:\ Temp \ Folder 1 \ Folder 2 \

在这个path上,string.. \ Parent.bat被附加,并且附加了整个新的文件名
C:\ Temp \ Folder 1 \ Folder 2 \ .. \ Parent.bat由于空格而被括在双引号中。

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


像子程序一样调用Parent.bat

 call "%~dp0..\Parent.bat" 

命令调用导致在同一命令进程(控制台窗口)中执行batch fileParent.bat ,并暂停Example.bat的执行,直到完成Parent.bat

在完成Parent.bat处理之后,批处理将在Example.bat下一行继续。

例外:
Parent.bat包含不带开关/B命令exit ,因为这会导致命令行解释程序cmd.exe立即退出,处理Example.batParent.bat

执行call /? 或者在命令提示窗口help call命令调用的简短帮助。


启动Parent.bat作为并行进程

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

除了可选标题之外,命令启动时没有任何参数,导致在单独的控制台窗口中由单独的命令进程执行batch fileParent.bat ,而不停止Example.bat的执行。

因此,这两个batch file同时运行(或多或less)。

注意:
命令开始将双引号中的第一个string解释为标题。 因此,当启动batch file或应用程序或启动的batch file/应用程序的任何参数必须用双引号指定时,由于有一个或多个空格,所以有必要明确定义双引号中的标题。

执行start /? 或者help start在命令提示符窗口中help start以获得命令启动的简短帮助。


调用Parent.bat作为单独的过程

 start "Parent Batch" /wait "%~dp0..\Parent.bat" 

命令以可选参数/wait开始,作为单独的进程(batch file或控制台应用程序的附加控制台窗口)执行已启动的batch file/应用程序,但会暂停执行当前batch file,直到启动的进程(Windows应用程序或在新的控制台窗口中执行的batch file/控制台应用程序)终止本身。

尝试使用这个:

 start ../code.bat 

..\被用来上一层。 你的情况需要两个级别试试:

 start ..\..\code.bat