Tubulação não funciona no cmd.exe no Windows 7

6

Eu comecei a ver alguns problemas muito estranhos com o comando pipe não funcionando no Windows 7 de 64 bits na minha máquina. Comandos como este:

 echo test | more  

usado para trabalhar sem problemas, mas agora eles falham com a seguinte mensagem de erro:

'.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.  

Também não parece importar o que está nos lados esquerdo e direito do pipe, qualquer instrução de linha de comando com um pipe falha. Também não parece fazer diferença se o lado direito do tubo não for um executável adequado.

Por exemplo as seguintes exibem o mesmo comportamento de falha:

type file1 | findstr blah
dir | thisdoesnotexist

Todas essas coisas funcionaram bem há uma semana, e não tenho certeza do que poderia ter mudado. Houve possivelmente uma atualização do Windows que ocorreu no momento em que parou de funcionar, mas não tenho certeza.

Minhas variáveis de ambiente %PATH% e %PATHEXT% parecem boas também. Seu conteúdo se parece com o seguinte:

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.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.4\ISE_DS\ISE\bin\nt64;
C:\altera.1\quartus\bin64

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC  

Usar qualquer um desses comandos sem o pipe funciona bem, e redirecionar para / do arquivo também funciona bem. Os programas parecem estar saindo corretamente, pois não há nada aparecendo em nenhum dos logs de eventos.

Alguém sabe o que pode ser a causa de tal problema?

    
por marcush 26.02.2013 / 01:33

1 resposta

9

Parece que sua definição de variável ComSpec está definida incorretamente. A variável ComSpec deve conter o caminho completo absoluto para o CMD.EXE. Ambos os lados de um pipe são executados por um novo thread CMD que é iniciado através da definição do ComSpec. O pipe falhará se o ComSpec não for válido, como está acontecendo no seu caso.

Eu não descobri por que essa mensagem de erro em particular aparece se o ComSpec não aponta para um executável válido. Mas eu confirmei que recebo a mesma mensagem no Vista se eu definir incorretamente o ComSpec e, em seguida, tentar usar um pipe.

    
por 26.02.2013 / 03:00