如何调用当前目录上一级的批处理文件?

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.batParent.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

【讨论】:

以上是关于如何调用当前目录上一级的批处理文件?的主要内容,如果未能解决你的问题,请参考以下文章

C语言中怎样调用批处理文件?

如何使用批处理文件更改当前工作目录

PHP获取文件绝对路径的代码(上一级目录)

Linux 上如何仅获取一级子目录的大小?

Linux之文件基础操作命令

linux命令学习记录