如何调用当前目录中上一级的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
- 文件夹2
- 文件夹1
- 温度
当前的工作目录是用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.bat和Parent.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