(MS-DOS) 时间延迟

3

我看到了一些引起时间延迟的方法,例如ping和dir。虽然它们都不是非常精确,但是否有更好的方法来引起时间延迟呢?

我听说过一些方法,但它们并不适用于所有计算机,包括我的Windows XP和学校的Windows NT。

在Google上查找一个好答案需要花费很长时间,因为我还没有在Stack Overflow上找到这个问题,所以我想自己创建这个问题;)


既然你提到了XP和NT,我假设你是在指控制台而不是实际运行MS-DOS :) 你可以添加一个工具来进行睡眠吗? 你说ping选项不够精确,你需要什么样的精度? - Arnold Spence
5个回答

6

我知道了,虽然这不是最理想的解决方案,因为 .bat 文件是为了与任何电脑兼容而设计的,所以我每次都必须下载那个文件...但是我会看看能做些什么,谢谢你的回复 :) - billyy
我明白了,我找到了一个很好的方法来使用它。因此这可能是最好的方法。稍微调整一下,但是没错,它可以完成任务。 - billyy

5

<warning>这是一种黑客方式</warning>

使用你喜欢的编程语言(除了MS-DOS批处理),创建一个应用程序,它需要一个参数-等待的毫秒数,然后,只需从批处理文件中调用此程序以等待所需的时间。

据我所知,在DOS中,这是唯一可靠的方法。


这不是我曾经使用过的方法,但它是一个很好的解决方案,尽管我并不真正知道在这种情况下有什么语言会有用。 - billyy

2
如果您没有能力在批处理文件中附加另一个程序,请使用 DEBUG实时编写一个休眠命令并执行它。
编辑:上面的回答有点玩笑。我不会运行带有一些DEBUG诡计的批处理文件。我相信在批处理文件中使用延迟的传统方式是使用 CHOICE命令。
type nul|choice /c:y /t:y,nn > nul

当然,在XP上这是行不通的,因为那将太过方便了。

当然,我可以让它编写一个PHP脚本并执行它,PHP脚本隐藏,等待,并在批处理完成后删除窗口... - billyy
@billyy:你能写一个像这样的 PHP 脚本吗?<?php sleep($args[0]); ?> - Piskvor left the building

0

根据您的机器速度,可以实现几毫秒的精度。

我刚刚完成了这样一个批处理程序,虽然我不会与您分享实际代码,但我会给您一些指针:

  1. 使用%time%变量,并将其分成子字符串(不包括“:”和“。”)-一个子字符串将获取秒数,另一个子字符串将获取分钟数(您可以添加小时数,用于超过一小时的延迟,甚至可以合并日期)

  2. 使用set /A将时间变量转换为1个整数,表示自整点(X:00:00.00)以来经过的秒数。将输入的延迟时间(以秒为单位)加到其中。

  3. 创建一个简短的循环,比较组合变量(在第2节中解释)的值与当前时间的值(需要在此循环内重新计算当前组合的分钟+秒值),并在匹配为真时退出循环。

这里有一个重要的错误修复 - 你需要截断任何前导零到即将在“set /A”命令中被评估的变量。我注意到控制台的求值器(对于此命令)会在使用具有前导08或09(或仅为08或09)的整数时返回错误。
备注: 这仅适用于启用了命令扩展。要测试它,请在例程开头使用以下内容:
verify other 2>nul
setlocal enableextensions
if errorlevel 1 goto err

然后添加一个名为“err”的错误处理程序子例程。

如果您想在同一文件中继续批处理,请在循环子例程之后使用“endlocal”。

顺便说一句,这仅适用于Windows XP服务包2或3。


0

"...正确的方式...."

你不能在DOS中这样做。


人们经常这样说,但你必须能够创造它,即使只是创建一个命令,如果我输入5秒钟,只需重复一个命令5次,让它忙碌1秒钟... - billyy
我认为他的意思是:如果不进行重大的黑客行为,就无法在DOS中实现这一点。 - Ben S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接