重现步骤:
- 创建一个仅包含以下内容的
test.bat
文件。timeout /T 60
- 运行。
- 最大化其(
cmd.exe
)窗口。
现在它会立即中止并自行关闭。至少对我来说是这样。
是的,我知道这个/NOBREAK
标志,我现在使用它,它不仅可以防止按键,还可以防止最大化错误(?),但我仍然想知道为什么会发生这种情况。
我不确定我为什么特别关心这个,因为我在尝试使用 Windows 时不断发现令人震惊的严重错误,但不知何故,这似乎是一个“核心实用程序”,而且当你最大化它时它会关闭窗口,这真的让我很烦恼。输出中没有提到这一点timeout /?
,输出仅提到按键。
注意:如果您打开 cmd.exe 并直接在其中输入命令,则不会发生这种情况。它必须在 .bat 文件中才会发生这种情况。
答案1
这既是一个错误,也是一个功能。
timeout 是为早期版本的 Windows 设计的。当您调整窗口大小时,命令也会中止。原因是当您调整窗口大小时,窗口的内部尺寸也会发生变化,这会触发键盘重置(如果您愿意的话),这会导致 timeout 记录实际上不存在的按键。
它也发生在 Windows 终端的 cmd 窗口中。
可以这么说,这种情况不应该发生,并且在 Windows 7 及更早版本中可能不会发生。
答案2
也许使用 powershell 进行安全延迟:
powershell -noprofile -command "& {[system.threading.thread]::sleep(60000)}"
在批处理文件中使用此命令。
答案3
答案4
同样如此...最大化超时的命令行窗口会将其杀死...使用几个不同的 Win10 系统。
低功率芯片根据我关于最大化触发键盘重置从而触发键盘输入从而触发等待超时的观察,这对我来说似乎是正确的。
核实:
创建类似于上面提到的批次号 1:
@echo off
echo TIMEOUT 1:
echo Batch ends after this timeout.
echo Try to maximize this window... what happens?
timeout /T 20
rem END
下列的低功率芯片,批处理应在最大化后继续运行...如果还有其他代码。没有什么比这更容易检查的了...
创建批次号 2(或扩展第一个批次)并查看会发生什么:
@echo off
echo TIMEOUT 1:
echo Batch does NOT end after this timeout... there will be another timeout.
echo Try to maximize this window... what happens?
timeout /T 20
echo TIMEOUT 2:
echo Batch ends after this timeout.
echo Try to maximize this window... what happens?
timeout /T 20
rem END
就我的情况而言,在第一个 TIMOUT 仍在运行时最大化命令窗口,它会立即跳转到下一个代码行。