Канал не работает в cmd.exe на Windows 7

Канал не работает в cmd.exe на Windows 7

Я начал замечать некоторые очень странные проблемы с командой pipe, которая не работает на Windows 7 64-bit на моем компьютере. Команды типа этой:

 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. Обе стороны конвейера выполняются новым потоком CMD, который запускается через определение ComSpec. Конвейер даст сбой, если ComSpec недействителен, как это происходит в вашем случае.

Я не понял, почему появляется это конкретное сообщение об ошибке, если ComSpec не указывает на допустимый исполняемый файл. Но я подтвердил, что получаю то же самое сообщение на Vista, если я неправильно устанавливаю ComSpec, а затем пытаюсь использовать канал.

Связанный контент