我通过了几种导致时间延迟的方法,例如 pings 和 dirs。尽管它们都不是真正精确的,但是否有适当的方法来造成时间延迟?
我听说过一些事情,尽管它们不能在所有计算机上运行,在我的 Windows XP 和大学的 Windows NT 上都没有。
浏览 Google 上的所有文件需要很长时间才能找到一个好的答案,而且由于我还没有在 Stack Overflow 上找到问题,所以我认为自己创建问题可能会很好;)
它将允许您执行此操作。
<warning>This is a hack</warning>
使用您最喜欢的编程语言(MS-DOS 批处理除外)并创建一个应用程序,该应用程序接受一个参数,即等待的毫秒数,然后,只需从批处理文件中调用该程序以休眠所需的时间。
据我所知,这是在 DOS 中唯一可靠的方法。
“...正确的方式....”
你不能在 DOS 中这样做。
根据您机器的速度,可以达到几毫秒的精度。
我刚刚创建了这样一个批处理,虽然我不会与你分享实际代码,但我会给你一些指示:
使用 %time% 变量,并划分为子字符串(没有“:”和“。”) - 一个子字符串将获得秒,另一个 - 分钟(您可以添加小时,延迟超过一个小时,甚至包含日期)
使用 set /A 将时间变量转换为 1 个整数,表示自舍入小时 (X:00:00.00) 以来经过的秒数。将输入的延迟(以秒为单位)添加到其中。
创建一个短循环,将组合 var 的值(在第 2 节中解释)与当前时间(需要在此循环内重新计算当前组合的 min+sec 值)进行比较,并在匹配为真时退出循环。
这里的一个主要错误修复 - 您需要将任何前面的零截断为即将在“set /A”命令中评估的变量。我注意到,当使用前面带有 08 或 09(或简单的 08 或 09)的整数时,控制台的求值器(对于此命令)会返回错误。
备注:这仅适用于启用命令扩展。要对其进行测试,请在例程开始时使用以下内容:
verify other 2>nul
setlocal enableextensions
if errorlevel 1 goto err
然后添加一个名为“err”的错误处理程序子程序。
如果您想在同一个文件中继续批处理,请在循环子例程之后使用“endlocal”。
顺便说一句,这仅适用于Windows XP Service Pack 2 或 3。