(MS-DOS)时间延迟

时间:2009-04-21 18:35:29

标签: time dos delay

我经历了几种导致时间延迟的方法,例如ping和dirs。虽然它们都不是真的精确,但是有没有正确的方法来造成时间延迟?

我听说过一些事情,虽然它们不适用于所有计算机,不适用于我的Windows XP或大学时的Windows NT。

需要很长时间才能通过Google上的所有文件找到一个好的答案,而且由于我还没有在Stack Overflow上找到问题,我认为自己创建问题可能会很好;)

5 个答案:

答案 0 :(得分:6)

Sleep

它可以让你这样做。

答案 1 :(得分:5)

<warning>This is a hack</warning>

使用您最喜欢的编程语言(MS-DOS批处理除外)并创建一个应用程序,它接受一个参数,等待的毫秒数,然后,只需从批处理文件中调用此程序即可睡眠所需的数量。

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

答案 2 :(得分:2)

如果您无法将另一个程序与批处理文件一起发送,请使用DEBUG即时写入睡眠命令,然后执行它。

编辑: 上面的答案有点像笨蛋。我不会运行一个有一些DEBUG技巧的批处理文件。我认为在批处理文件中使用延迟的传统方法是CHOICE commad。

type nul|choice /c:y /t:y,nn > nul

当然,这在XP中不起作用,因为太过方便了。

答案 3 :(得分:0)

“......正确的方式....”

你不能在DOS中这样做。

答案 4 :(得分:0)

根据机器的速度,可以达到几毫秒的精度。

我刚刚创建了这样一个批处理,虽然我不会与你分享实际的代码,但我会给你一些指示:

  1. 使用%time%变量,并分配到子串(不带“:”和“。”) - 一个子字符串将获得秒,另一个 - 分钟(您可以添加小时,延迟超过一小时,甚至包含日期)

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

  3. 创建一个短循环,比较组合var的值(在第2节中解释)与当前时间(需要在此循环内重新计算当前时间内的最小值+秒值),并在退出循环时这场比赛是真的。

  4. 这里有一个主要的错误修正 - 你需要将任何前面的零截断为即将在“set / A”命令中进行评估的变量。我注意到,当使用08或09之前(或简称为08或09)的整数时,控制台的评估程序(对于此命令)会返回错误。

    注: 这仅适用于启用了命令扩展。要测试它,请在例程开头使用以下内容:

    verify other 2>nul
    setlocal enableextensions
    if errorlevel 1 goto err
    

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

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

    顺便说一句,这仅适用于 ONLY 到Windows XP Service Pack 2或3。