我正在使用批处理文件 folder1/folder2/file.bat
父文件夹中有一个批处理文件folder1
,我想打开它file.bat
我尝试过使用:
start ..\..\code.bat
Run Code Online (Sandbox Code Playgroud)
但是这会导致错误消息,因为找不到文件.
有任何想法吗?
Mof*_*ofi 18
我想更好地解释一下应该用于示例的内容,因为到目前为止发布的答案仅适用于当前工作目录是包含批处理文件的目录file.bat
.
有一个目录结构如下:
当前工作目录是C:\ Temp执行时Example.bat
使用
"Folder 1\Folder 2\Example.bat"
Run Code Online (Sandbox Code Playgroud)
或者
"C:\Temp\Folder 1\Folder 2\Example.bat"
Run Code Online (Sandbox Code Playgroud)
批处理文件Parent.bat
包含例如:
echo %0 is active.
pause
Run Code Online (Sandbox Code Playgroud)
批处理文件Example.bat
已包含:
@echo off
echo Calling Parent.bat ...
rem How to run Parent.bat here?
echo %0 is active.
pause
Run Code Online (Sandbox Code Playgroud)
在这种情况下,当前工作目录与包含目录的目录不同的实际解决方案Example.bat
如下所示.
"%~dp0..\Parent.bat"
Run Code Online (Sandbox Code Playgroud)
%0
在执行批处理文件时引用参数0,该文件始终是在启动批处理文件时在父进程中指定的批处理文件的名称.
但是想要的是没有双引号的批处理文件的驱动器和路径.因此,表达式%~dp0
用于从参数0 获取C:\ Temp\Folder 1\Folder 2 \.
在此路径上,附加了字符串..\Parent.bat,另外整个新文件名
C:\ Temp\Folder 1\Folder 2\..\Parent.bat由于空格而用双引号括起来.
完成Example.bat
处理后没有返回Parent.bat
.
call "%~dp0..\Parent.bat"
Run Code Online (Sandbox Code Playgroud)
命令调用导致在Parent.bat
同一命令进程(控制台窗口)中执行批处理文件,暂停执行Example.bat
直到Parent.bat
完成.
完成Example.bat
处理后,批处理在下一行继续执行Parent.bat
.
例外:
Parent.bat
包含exit
没有开关的命令,/B
因为这会立即退出命令行解释器cmd.exe
处理Example.bat
和Parent.bat
.
执行call /?
或help call
在命令提示符窗口中获取命令调用的简短帮助.
start "Parent Batch" "%~dp0..\Parent.bat"
Run Code Online (Sandbox Code Playgroud)
没有任何参数的命令启动(可选标题除外)导致在Parent.bat
单独的控制台窗口中通过单独的命令进程执行批处理文件而不停止执行Example.bat
.
因此,两个批处理文件同时运行(或多或少).
注意:
命令start将双引号中的第一个字符串解释为title.因此,当要启动批处理文件或应用程序时,必须在双引号中明确定义标题,或者由于1个或多个空格,必须在双引号中指定已启动的批处理文件/应用程序的任何参数.
执行start /?
或help start
在命令提示符窗口中获取命令启动的简短帮助.
start "Parent Batch" /wait "%~dp0..\Parent.bat"
Run Code Online (Sandbox Code Playgroud)
命令以可选参数启动/wait
导致执行启动的批处理文件/应用程序作为单独的进程(批处理文件或控制台应用程序的附加控制台窗口),但停止执行当前批处理文件直到启动进程(Windows应用程序或批处理文件)/console应用程序在新的控制台窗口中执行)终止自身.
Dou*_*leM 10
..\
用来升级一级.你的情况需要两个级别尝试:
start ..\..\code.bat
Run Code Online (Sandbox Code Playgroud)
你可以:
cd..
start Code.bat
Run Code Online (Sandbox Code Playgroud)
这将从其自己的目录启动code.bat