如何调用当前目录上一级的批处理文件?
Posted
技术标签:
【中文标题】如何调用当前目录上一级的批处理文件?【英文标题】:How to call a batch file that is one level up from the current directory? 【发布时间】:2014-09-03 13:21:09 【问题描述】:我在folder1/folder2/file.bat
中使用批处理文件
父文件夹folder1
中有一个批处理文件,我想通过file.bat
打开它
我尝试过使用:
start ..\..\code.bat
但这会导致错误消息,因为找不到文件。
有什么想法吗?
【问题讨论】:
【参考方案1】:我想通过示例更好地解释应该使用什么,因为到目前为止发布的答案仅适用于当前工作目录是包含批处理文件 file.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"
批处理文件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
的目录不同的情况下,在这种情况下真正可行的解决方案如下。
使用 Parent.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
。
像子程序一样调用Parent.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的简短帮助。
启动 Parent.bat 作为并行进程
start "Parent Batch" "%~dp0..\Parent.bat"
命令 start 没有任何参数(可选标题除外)导致批处理文件 Parent.bat
在单独的控制台窗口中由单独的命令进程执行,而不会停止 Example.bat
的执行。
因此两个批处理文件同时运行(或多或少)。
注意: 命令 start 将双引号中的第一个字符串解释为标题。因此,当要启动批处理文件或应用程序时,必须在双引号中明确定义标题,或者由于 1 个或多个空格必须在双引号中指定已启动的批处理文件/应用程序的任何参数。
在命令提示符窗口中执行start /?
或help start
以获得命令start的简短帮助。
调用 Parent.bat 作为单独的进程
start "Parent Batch" /wait "%~dp0..\Parent.bat"
带有可选参数 /wait
的命令 start 导致已启动的批处理文件/应用程序作为单独的进程执行(批处理文件或控制台应用程序的附加控制台窗口),但会停止执行当前批处理文件,直到启动的进程(在新控制台窗口中执行的 Windows 应用程序或批处理文件/控制台应用程序)自行终止。
【讨论】:
【参考方案2】:..\
用于上一级。你的案子需要两个级别
试试:
start ..\..\code.bat
【讨论】:
在他的情况下,他只需要升级一个级别,或者这就是他所要求的,如果你阅读了他的帖子,那正是他尝试过的事情。对于 bat 文件,您需要使用 call 而不是 start (至少如果您想在第二个完成后继续使用原始 bat 文件):所以正确的方法是: call ..\code.bat【参考方案3】:你可以:
cd..
start Code.bat
这将从自己的目录启动 code.bat
【讨论】:
这不是被问到的。您想从子目录运行它可能是有原因的。例如,因为您需要将子目录中的一些文件作为参数传递。【参考方案4】:尝试使用这个:
start ../code.bat
【讨论】:
以上是关于如何调用当前目录上一级的批处理文件?的主要内容,如果未能解决你的问题,请参考以下文章