如何获取批处理文件以执行下一个命令而无需等待

Posted

技术标签:

【中文标题】如何获取批处理文件以执行下一个命令而无需等待【英文标题】:how to get a batch file to execute the next command without waiting 【发布时间】:2021-10-15 23:14:54 【问题描述】:

我正在尝试编写一个简单的批处理文件,该文件将打开一个 VLC 并针对一个流进行负载测试,我希望能够打开多个窗口,现在假设为 20 个。问题在于脚本,它会等到 VLC 程序终止后再激活另一个程序。

这是我所拥有的:

@echo OFF
FOR %%x IN (0, 1, 20) DO "C:\Program Files\VideoLAN\VLC\vlc.exe" https://5e768b74d354b.streamlock.net/tcproedge/ahowardtestingGenesis/MP4:ahowardtestingGenesis/IKqUJhTfIe4uQA8LbLA5high/playlist.m3u8
PAUSE

有没有办法让 for 循环执行下一个命令,而不管上一个命令是否终止?还是有更有效的方法来做到这一点?

【问题讨论】:

【参考方案1】:

首先您的FOR 命令不正确。目前它将执行三个循环,一个用于每个字符串标记,使用一个或多个并发分隔符进行标识。其中最常见的是 SP (space), HT (horizo​​ntal tab), , (逗号), ; (分号), = (等号) LF (换行)。在您的情况下,并发逗号和空格仅提供三个标记:0120

您需要运行 20 个循环,您可以使用 FOR /L 方法来实现。此方法将从第一个整数开始循环,以第二个整数递增,并在第三个整数结束。

为了更好地了解FOR 命令的工作原理,请打开命令提示符窗口,输入for /?,然后按ENTER// RETURN 键。

至于您的主要问题,当您从批处理文件或 cmd.exe 运行可执行文件时,控制权不会传递给下一个命令,直到该过程完成。为了绕过该限制,您可以使用START 命令,该命令本质上将运行命令Start,并将可执行文件作为参数,并完成(无论该可执行文件做什么).

为了更好地了解START 命令的工作原理,请打开命令提示符窗口,输入start /?,然后按ENTER// RETURN 键。

Start 需要注意的重要一点是,如果您的论点被双引号括起来,我建议将其作为最佳做法,无论它是否包含空格,第一个双引号带引号的字符串被Start 视为“标题”,因此您应该包含一个标题,即使是一个空标题"",以防止您的应用程序成为标题,并将URI 字符串作为可执行文件。

batch-file 示例:

@For /L %%G In (1, 1, 20) DO @Start "" "%ProgramFiles%\VideoLAN\VLC\vlc.exe" "https://5e768b74d354b.streamlock.net/tcproedge/ahowardtestingGenesis/MP4:ahowardtestingGenesis/IKqUJhTfIe4uQA8LbLA5high/playlist.m3u8"

您还会在此处注意到,我双引号引用了 VLC.exe 的参数,这也是一种最佳做法,以保护任何潜在的有毒字符。

【讨论】:

以上是关于如何获取批处理文件以执行下一个命令而无需等待的主要内容,如果未能解决你的问题,请参考以下文章

如何等待进程终止以在批处理文件中执行另一个进程

如何在批处理中做到执行了一条指令后,等待计算机回应完成后再执行下一条指令?

如果出现错误,如何获取批处理文件 .bat 继续执行下一条语句

如何等待http请求在处理到angular 7中的下一步之前获得响应[重复]

如何在批处理文件中调用下一个命令之前等待 maven 测试套件完成?

如何使用 python 停止程序的执行?