【问题标题】: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

但这会导致错误消息,因为找不到文件。

有什么想法吗?

【问题讨论】:

    标签: batch-file call


    【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-08
        • 1970-01-01
        • 2011-07-05
        • 1970-01-01
        • 2011-05-24
        • 1970-01-01
        相关资源
        最近更新 更多