我正在使用位于folder1\folder2\file.bat
的批处理文件。
在父文件夹folder1
中有一个批处理文件,我想通过file.bat
打开它。
我尝试过使用:
start ..\..\code.bat
但是这会导致一个错误信息,因为找不到该文件。
有什么想法吗?
我正在使用位于folder1\folder2\file.bat
的批处理文件。
在父文件夹folder1
中有一个批处理文件,我想通过file.bat
打开它。
我尝试过使用:
start ..\..\code.bat
但是这会导致一个错误信息,因为找不到该文件。
有什么想法吗?
我想用一个例子来更好地解释应该使用什么,因为到目前为止发布的答案只适用于当前工作目录是包含批处理文件file.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
的目录不同的情况下,真正有效的解决方案如下。
"%~dp0..\Parent.bat"
%0
引用了批处理文件执行时的第0个参数,它总是指在启动批处理文件时指定的批处理文件名。
但是我们需要的是批处理文件的驱动器和路径,而且不带双引号。因此,使用表达式 %~dp0
来从参数0中获取C:\Temp\Folder 1\Folder 2\。
在此路径上附加字符串..\Parent.bat,并且整个新文件名C:\Temp\Folder 1\Folder 2\..\Parent.bat由于空格而用双引号括起来。
在处理完Parent.bat
之后,没有返回到Example.bat
。
call "%~dp0..\Parent.bat"
命令call会在同一个命令进程(控制台窗口)中执行批处理文件Parent.bat
,并暂停Example.bat
的执行,直到Parent.bat
完成。
在Parent.bat
处理完成后,批处理继续在Example.bat
中的下一行继续执行。
异常情况:
Parent.bat
包含命令exit
,但没有加上开关/B
,因此这会导致命令行解释器cmd.exe
立即退出处理Example.bat
和Parent.bat
。
在命令提示符窗口中执行call /?
或help call
命令,以获取有关命令call的简短帮助信息。
start "Parent Batch" "%~dp0..\Parent.bat"
在没有任何参数的情况下使用start命令(标题除外),会在单独的命令进程中执行批处理文件Parent.bat
,并在单独的控制台窗口中运行,而不会停止Example.bat
的执行。
因此,两个批处理文件同时运行(或多或少)。
注意:
命令start将双引号中的第一个字符串解释为标题。因此,当需要在双引号中指定要启动的批处理文件或应用程序,或者已启动的批处理文件/应用程序的任何参数中有1个或多个空格时,必须明确定义双引号中的标题。
在命令提示符窗口中执行start /?
或help start
,以获取有关start命令的简短帮助信息。
start "Parent Batch" /wait "%~dp0..\Parent.bat"
使用可选参数/wait
的命令start会作为单独的进程(对于批处理文件或控制台应用程序会有一个额外的控制台窗口)执行所启动的批处理文件/应用程序,但会暂停当前批处理文件的执行,直到启动的进程(在新的控制台窗口中运行的Windows应用程序或批处理文件/控制台应用程序)自行终止。
..\
用于返回上一级目录。你的情况需要返回两级目录。
start ..\..\code.bat
你只需要:
cd..
start Code.bat
这将从其自己的目录中启动code.bat。
尝试使用这个:
start ../code.bat