为什么命令"超时"在批处理文件突然不再工作?

时间:2017-06-11 05:02:00

标签: windows batch-file timeout

我是否错过了Windows内部更改"超时"命令?

我现在有一个批处理文件,它显示了程序的版本号。我添加了timeout命令以保持CMD窗口打开几秒钟。所以我的批处理文件现在看起来像这样:

context -version
timeout 7

这很好但是由于某些Windows更新(显然),CMD窗口直接关闭,好像超时命令不再起作用。当我从CMD窗口启动文件时,我收到一条消息:

  

D:\ CTX> 超时7
  尝试超时 - 帮助'了解更多信息。

该文件就像我创建文件一样,但这种行为对我来说是新的。

所以有人能告诉我这里出了什么问题吗?

2 个答案:

答案 0 :(得分:9)

我相信您可能获得了timeout的不同版本,因为帮助提示--help\*nixy样式选项说明符。

从提示

尝试
where /T timeout.*

应列出timeout上的path版本,并可能有助于查找流氓版本。

答案 1 :(得分:6)

TIMEOUT 不是cmd.exe(Windows命令解释程序)的内部命令,如 FOR DIR

这是一个外部命令,表示控制台应用程序位于Windows目录%SystemRoot%\System32

仅使用timeout没有文件扩展名且没有完整路径时,Windows命令解释程序首先在当前目录中使用timeout.*搜索具有在环境变量 PATHEXT中列出的文件扩展名的文件

如果在当前目录中找不到此类文件,Windows命令解释程序将继续搜索环境变量中定义的目录中 PATHEXT 中列出的文件扩展名timeout.* %SystemRoot%\system32;%SystemRoot%\system32;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\; PATH

在Windows Vista及更高版本的Windows上,系统路径定义为:

%SystemRoot%\System32\timeout.exe

因此,在批处理文件中仅使用timeout时,通常会先找到timeout.*

但是,如果当前目录包含名称为timeout.*的文件,其文件扩展名也列在环境变量 PATHEXT 中,或者 PATH 在本地或系统中重新定义广泛的安装程序将其他目录路径放在开头而不是在末尾附加它们,其中一个目录也包含%SystemRoot%\System32\timeout.exe文件,Windows命令解释程序运行此可执行文件或脚本。

解决此问题的建议:

  1. 在批处理文件timeout中使用,因为Windows命令解释程序不得搜索此可执行文件,并且不能错误地执行错误的SystemRoot,但环境变量除外PATH在本地修改,与%SystemRoot%\system32操作相比,这种可能性非常小。

  2. 打开Windows 控制面板 - 系统 - 高级系统设置(左侧蓝色链接),选择标签高级,点击按钮环境变量... ,在系统变量列表的下半部分搜索路径,选择此环境变量,点击修改,并将timeout.*左侧或上方(取决于Windows版本)的所有目录路径移动到目录列表的末尾。

  3. 请向修改系统路径的应用程序或软件包的作者报告,并在开头插入他们的目录路径,而不是在结尾处附加有关Windows的错误修改系统路径

  4. 正如Magoo所写的那样:由于输出帮助声明,从Windows移植到Windows的/?显然是在Windows机器上执行的。要在Windows上获得有关命令的帮助,必须通常使用参数-h执行命令,而不是像Unix上那样使用--help或{{1}}执行命令。