【问题标题】:How to make by-turn start of .exe files using the .bat-script如何使用 .bat 脚本按顺序启动 .exe 文件
【发布时间】:2010-11-03 18:05:23
【问题描述】:

我有目录结构:

DIR
|-component_name
  |-source
  |-setup.exe
|-another_component_name
  |-source
  |-setup.exe
|-yet_another_component_name
  |-source
  |-setup.exe

and so on...

在像“component_name”这样的每个目录中,我都有setup.exe 文件,它将当前组件安装到Delphi 中的调色板组件中。我需要制作DIR/setup.bat 文件,该文件将在DIR 的每个组件目录中依次启动setup.exe

提前谢谢你。

【问题讨论】:

    标签: batch-file scripting


    【解决方案1】:

    我猜当你说“by-turn”时,你的意思是“一个接一个”(即,执行第一个 setup.exe,让它完成,执行第二个 setup.exe,让它完成,等等)。

    如果 setup.exe 基于控制台,那么您可以直接调用您的 .EXE。每个 setup.exe 都将附加到 .BAT 文件的控制台窗口,因此在 setup.exe 完成之前阻止其执行。类似于Bubbafat给出的for循环示例:

    for /f %%i in ('dir /b /s setup.exe') do %%i
    

    但是,如果 setup.exe 基于 gui,那么您将不得不使用 CALL 命令。这将导致 .BAT 文件在执行更多命令之前等待被调用进程终止:

    for /f %%i in ('dir /b /s setup.exe') do call %%i
    

    现在,如果我误解了您,并且您的 EXE 是基于控制台的,并且您想同时执行它们而不是等待它们依次完成,那么您可以使用 START 命令。这将为每个 EXE 打开一个新的控制台窗口。

    for /f %%i in ('dir /b /s setup.exe') do start %%i
    

    注意:从“for /r”类型循环更改为“for /f”,因为它只会返回现有路径(与“for /r”不同,它会生成可能不存在的路径)。

    【讨论】:

    • 谢谢!!! for /r %%i in (setup.exe) do %%i 工作正常!是的,setup.exe 是基于控制台的,但我还需要从每个目录“一个接一个”(setup.exe 所在的位置)运行 Uninstall.bat。例如,如何使用 uninst.bat 脚本来制作它?我已阅读 stackoverflow.com/questions/649634/ 但我不明白如何在循环中从另一个 bat 运行 .bat。请帮忙。
    • 只需将“setup.exe”替换为“uninst.bat”即可。例如:for /f %%i in ('dir /b /s uninst.bat') do %%i
    • 对不起,我忘了说 uninst.bat 只包含这个字符串:“setup.exe” /uninstall 所以我需要从另一个 .bat 循环运行 .bat 并且最后 .bat 使用密钥执行 .exe...
    【解决方案2】:

    示例:

    for /f %%i in ('dir /s /b setup.exe') do (
    %%i
    )
    

    【讨论】:

      【解决方案3】:

      我想您是在问“如何运行目录树中的每个 setup.exe?”。

      如果事先知道该列表,您可以创建一个批处理文件,让程序一个接一个地运行。例如

      component_name\setup.exe
      another_component_name\setup.exe
      yet_another_component_name\setup.exe
      

      但如果列表不是静态的,并且它们运行的​​顺序并不重要,那么您可以在批处理文件中使用 for 循环,如下所示:

      for /F %i in ('dir /B /S *.log') do %i
      

      要预览这会做什么,请在最后一个“%i”之前添加一个“echo”,例如:

      for /F %i in ('dir /B /S *.log') do echo %i
      

      如果这不是您的意思,请澄清您的要求,因为不清楚。

      【讨论】:

      • > 我想您是在问“我如何运行 > 目录树中的每个 setup.exe?”。确切地!我需要的是脚本: for /F %i in ('dir /B /S *.exe') do start %i pause 但我还需要从每个目录(setup.exe 所在的位置)运行 Uninstall.bat。我怎样才能用这个 .bat 脚本做到这一点?我已经阅读了[帖子]:stackoverflow.com/questions/649634/…,但都是一样的 - 我无法理解。
      【解决方案4】:

      使用这个:

      for /r %i in (setup.exe) do %i
      

      (或者,如果您将其嵌入到 .bat 文件中,请记住将 % 符号加倍)

      【讨论】:

        猜你喜欢
        • 2011-07-11
        • 2014-10-01
        • 2010-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-01
        相关资源
        最近更新 更多