6

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

 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 ответ1

9

Похоже, что ваше определение переменной ComSpec определено неправильно. Переменная ComSpec должна содержать полный абсолютный путь к CMD.EXE. Обе стороны канала выполняются новым потоком CMD, который запускается через определение ComSpec. Канал потерпит неудачу, если ComSpec недействителен, как это происходит в вашем случае.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .