管道在 Windows 7 上的 cmd.exe 中不起作用

管道在 Windows 7 上的 cmd.exe 中不起作用

我開始看到一些非常奇怪的問題,管道命令在我的電腦上的 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 上收到相同的訊息。

相關內容