我在folder1/folder2/file.bat
父文件夹folder1
中有一个批处理文件,我想通过file.bat
打开
我尝试过使用:
start ..\..\code.bat
但是这会导致错误消息,因为找不到文件。
有什么想法吗?
答案 0 :(得分:16)
我想更好地解释一下示例应该使用什么,因为到目前为止发布的答案仅适用于当前工作目录是包含批处理文件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 用双引号括起来。
处理Example.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.bat
和Parent.bat
。
在命令提示符窗口中执行call /?
或help call
,以获取有关命令调用的简短帮助。
start "Parent Batch" "%~dp0..\Parent.bat"
命令启动,没有任何参数,可选标题除外导致批处理文件Parent.bat
在单独的控制台窗口中通过单独的命令进程执行,而不会停止执行{{ 1}}。
因此,两个批处理文件同时运行(或多或少)。
注意:强>
命令 start 将双引号中的第一个字符串解释为title。因此,当要启动批处理文件或应用程序时,必须在双引号中明确定义标题,或者由于1个或多个空格,必须在双引号中指定已启动的批处理文件/应用程序的任何参数。
在命令提示符窗口中执行Example.bat
或start /?
,以获取有关命令开始的简短帮助。
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