我想请教大家如何在Windows中顺序运行批处理文件。
我已经尝试过:
start /w batchfile_1.bat
start /w batchfile_2.bat
..
start /w batchfile_n.bat
但是在继续执行下一个.bat文件之前,我必须手动关闭先前的.bat文件进程(例如通过点击)。 有没有自动化解决方案可以避免我每次都要手动关闭先前的.bat程序?
非常感谢。
我想请教大家如何在Windows中顺序运行批处理文件。
我已经尝试过:
start /w batchfile_1.bat
start /w batchfile_2.bat
..
start /w batchfile_n.bat
但是在继续执行下一个.bat文件之前,我必须手动关闭先前的.bat文件进程(例如通过点击)。 有没有自动化解决方案可以避免我每次都要手动关闭先前的.bat程序?
非常感谢。
我会查看这个问题的解决方案:运行多个批处理文件
使用call命令:
call bat1.cmd
call bat2.cmd
默认情况下,当您仅从另一个批处理文件中运行批处理文件时,控制权不会返回给调用方。这就是为什么需要使用call的原因。
基本上,如果您有这样的批处理:
@echo off
echo Foo
batch2.cmd
echo Bar
那么它只会输出
Foo
如果你按照这样写@echo off
echo Foo
call batch2.cmd
echo Bar
然而,它将输出
Foo
Bar
因为在batch2终止后,程序控制权会回到您的原始批处理文件。
call
命令可能会出现这样一种情况:当序列中的某个文件出现问题而提前退出时,后续文件仍将在控制返回到“主文件”时执行。你无法保证严格按顺序执行该序列。(不是贬低你的回答,只是发表评论。) - Ken White如果你喜欢使用START
命令,你可以在批处理文件结束时添加EXIT
命令。这将关闭start
命令创建的窗口。
@echo off
.
.
:: Inspired coding
.
.
exit
EXIT /b
。它不会关闭窗口,并且旨在将错误级别传递回调用文件。这是不可能的,因为你使用 START
启动了一个单独的 cmd.exe 环境。 - James K根据您的评论,我不确定但以下似乎是在运行该序列的START
命令时发生的情况:
调用START /W
命令并启动批处理文件。
批处理文件开始执行并运行程序。
批处理文件完成,其控制台窗口保持打开状态,但程序继续运行。
因为控制台窗口仍然保持打开状态,所以使用START /W
命令仍在执行。
等待程序终止,然后关闭控制台窗口,接着调用下一个START /W
命令,重复以上步骤。
现在,如果您在要顺序运行的每个批处理文件的末尾放置EXIT
,那么情况会更糟,因为它会导致批处理脚本完成后关闭控制台窗口,这反过来会结束相应的START /W
命令并导致另一个命令执行,即使批处理脚本调用的程序仍在运行。因此,效果是批处理脚本(或者说由它们执行的程序)同时运行而不是顺序运行。
START /W
命令移动并放置在每个批处理文件中,在该批处理文件执行并且不等待终止的每个命令之前。也就是说,如果你的 batchfile_1.bat
运行一个 program.exe
,则将命令行更改为 START /W program.exe
,其他批处理文件中的相关命令同理。
start /w
简单运行它们吗?虽然有一段时间了,但它们应该按顺序运行,等待彼此完成,并且不会打开需要用户输入等的新窗口。 - Bradstart
或call
,尝试一下。 - Brad