【问题标题】:How do I run a batch script from within a batch script?如何从批处理脚本中运行批处理脚本?
【发布时间】:2011-06-15 11:51:31
【问题描述】:

如何从批处理脚本中调用另一个批处理脚本?

我希望它在 if 语句中执行。

【问题讨论】:

    标签: command-line batch-file cmd


    【解决方案1】:

    使用CALL

    CALL nameOfOtherFile.bat
    

    这将阻止(暂停)当前批处理文件的执行,并等待CALLed 完成。

    如果您不想阻止它,请改用START

    在 cmd 提示符下使用 CALL /?START /? 获取详细信息。

    【讨论】:

      【解决方案2】:

      您可以按名称调用批处理脚本,就像在命令行上运行一样。

      所以,假设你有一个文件bar.bat,上面写着echo This is bar.bat!,并且你想从文件foo.bat 中调用它,你可以在foo.bat 中写这个:

      if "%1"=="blah" bar
      

      从命令行运行foo blah,你会看到:

      C:\>foo blah
      
      C:\>if "blah" == "blah" bar
      
      C:\>echo This is bar.bat!
      This is bar.bat!
      

      但要注意:当您从另一个批处理脚本调用一个批处理脚本时,原来的批处理脚本将停止运行。如果要运行辅助批处理脚本然后返回到上一个批处理脚本,则必须使用call 命令。例如:

      if "%1"=="blah" call bar
      echo That's all for foo.bat!
      

      如果你在上面运行foo blah,你会看到:

      C:\>foo blah
      
      C:\>if "blah" == "blah" call bar
      
      C:\>echo This is bar.bat!
      This is bar.bat!
      
      C:\>echo That's all for foo.bat!
      That's all for foo.bat!
      

      【讨论】:

        【解决方案3】:

        你应该使用 CALL

        CALL batch.bat
        

        【讨论】:

          【解决方案4】:

          如果您想在另一个窗口中打开批处理文件,请使用start。这样,您基本上可以同时运行两个脚本。换句话说,您不必等待刚刚调用的脚本完成。 以下所有示例均有效:

          start batch.bat
          start call batch.bat
          start cmd /c batch.bat
          

          如果您想等待脚本完成,请尝试start /w call batch.bat,但batch.bat 必须以exit 结尾。

          【讨论】:

          • 有没有办法将这些脚本中的所有错误通过管道传回主脚本的输出?
          【解决方案5】:

          你可以使用

          call script.bat
          

          或者只是

          script.bat
          

          【讨论】:

          • 如果你在脚本中直接调用另一个脚本,如果被调用脚本中的任何命令返回非零值(错误),被调用脚本也会停止执行,这里使用@987654323 @,即使调用的脚本出错,它也会继续执行。
          【解决方案6】:

          示例如下:

          你有一个.bat:

          @echo off
          if exist b.bat goto RUNB
          goto END
          :RUNB
          b.bat
          :END
          

          和 b.bat 有条件地从 a.bat 调用:

          @echo off 
          echo "This is b.bat"
          

          【讨论】:

            【解决方案7】:

            更好地运行两个批处理文件

                   start Call "batch_file_name.bat"
            

            如果你只是说

                   start"batch_file_name.bat"
            

            有时它只打开一个“cmd 窗口”,只是提示,你会看到代码是 没有被执行。

            【讨论】:

              【解决方案8】:

              嗯,我不知道为什么,但是调用没有成功
              call script.bat 没有返回原来的控制台。
              cmd /k script.bat 确实返回了原来的控制台。

              【讨论】:

              • 考虑编辑您的问题,以更正式地解释哪些无效和哪些有效,包括无效代码和有效代码
              • 对页面上唯一可行的解​​决方案的天真评论......除了“没有返回原始控制台”之外还有什么要解释的......所以, cmd/k 对我有用,同样,在我用其他“解决方案”浪费时间之后
              猜你喜欢
              • 2013-07-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-09-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多