我开始发现一些非常奇怪的问题,管道命令无法在我的计算机上的 Windows 7 64 位上运行。命令如下:
echo test | more
以前运行没有问题,但现在却失败并出现以下错误消息:
'.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC' is not recognized as an internal or external command, operable program or batch file.
管道左侧和右侧的内容似乎也无关紧要,任何带有管道的命令行指令都会失败。如果管道右侧根本不是合适的可执行文件,这似乎也没有什么区别。
例如,以下都表现出相同的失败行为:
type file1 | findstr blah
dir | thisdoesnotexist
一周前,所有这些东西都运行正常,我不知道发生了什么变化。可能是在它停止工作时发生了 Windows 更新,但我不确定。
我的%PATH%
和%PATHEXT%
环境变量看起来也都正常。它们的内容如下所示:
Path=C:\Program Files\Common Files\Microsoft Shared\Microsoft Online Services;
C:\Program Files (x86)\Common Files\Microsoft Shared\Microsoft Online Services;
C:\Windows\system32;
C:\Windows;
C:\Windows\System32\Wbem;
C:\Windows\System32\WindowsPowerShell\v1.0\;
C:\Program Files (x86)\Common Files\Roxio Shared\DLLShared\;
C:\Program Files (x86)\Common Files\Roxio Shared\10.0\DLLShared\;
C:\Programs\WinMerge;
C:\Programs\TortoiseHg\;
C:\Programs\MySQL\MySQL Server 5.1\bin;
C:\Programs\Aldec\Active-HDL 9.1\bin;
C:\Programs\Tcl\bin;
C:\Programs\modeltech_pe_10.0b\win32pe;
C:\Programs\Atlassian\atlassian-plugin-sdk-3.2.3\bin;
C:\Xilinx\12.4\ISE_DS\ISE\bin\nt64;
C:\altera\12.1\quartus\bin64
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
不使用管道使用这些命令中的任何一个都可以正常工作,重定向到/从文件也可以正常工作。程序似乎可以正确退出,因为任何事件日志中都没有出现任何内容。
有谁知道这个问题可能是什么原因造成的?
答案1
您的 ComSpec 变量定义似乎不正确。ComSpec 变量应保存 CMD.EXE 的完整绝对路径。管道的两侧均由通过 ComSpec 定义启动的新 CMD 线程执行。如果 ComSpec 无效,管道将失败,正如您的情况一样。
我还不明白为什么如果 ComSpec 未指向有效的可执行文件,会出现该特定错误消息。但我已确认,如果我错误地设置了 ComSpec,然后尝试使用管道,我会在 Vista 上收到相同的消息。