timeout 等待延时
timeout 在批处理里做延时等待,比用 ping 或别的命令凑时间清晰得多:/t 指定秒数,默认显示倒计时且按任意键可以跳过,加上 /nobreak 就会忽略按键、必须等满。它常用于等待服务启动、给用户留出确认时间、或者在重试循环之间做退让。要注意在标准输入被重定向的环境里它会直接报错退出。
基本信息
| 适用平台 | Windows CMD 与批处理 |
|---|---|
| 语法 | timeout /t 秒 [/nobreak] |
| 默认行为 | 显示倒计时,可按键跳过 |
| nobreak | 忽略按键,必须等满时长 |
| 静默输出 | 配合重定向到 nul 使用 |
典型使用场景
- 等待服务或进程启动完成后再执行下一步
- 重试循环之间加入退让间隔,避免密集重试
- 脚本启动前给用户几秒钟确认或取消
- 维护脚本中等候远端服务就绪
- 给用户推送提示信息后留出阅读时间
- 批量重启服务时逐个之间留出间隔,避免瞬时压力过大
常用示例
常用示例
timeout /t 30 REM 等 30 秒,可按键跳过
timeout /t 10 /nobreak REM 必须等满 10 秒
timeout /t 5 /nobreak >nul REM 静默等待,不显示倒计时
REM 重试循环示例:
:retry
net use \\web01\share
if errorlevel 1 ( timeout /t 15 /nobreak >nul & goto retry )
REM 需要毫秒级延时时改用:powershell -c "Start-Sleep -Milliseconds 500"写法与场景
| 写法 | 行为 | 适用场景 |
|---|---|---|
| /t 秒 | 等待指定秒数 | 常规延时 |
| /nobreak | 忽略按键 | 无人值守脚本 |
| 重定向到 nul | 不显示倒计时 | 减少日志噪音 |
| Start-Sleep | 毫秒级延时 | 需要更精细控制 |
在标准输入被重定向的环境(某些计划任务与服务上下文)里,timeout 会报输入重定向不受支持并立即退出;此时改用 PowerShell 的 Start-Sleep 更稳妥。排障时先确认当前环境有没有交互控制台,能省下不少猜测时间。
timeout 是秒级等待;需要毫秒精度或者要写跨平台脚本时,用 PowerShell 的 Start-Sleep 搭配秒或毫秒参数更合适。延时只是权宜手段,能用轮询检测状态的地方优先用轮询,比固定等待更可靠。