Redirecionamento de arquivos no Windows e% errorlevel%

Vamos dizer que queremos criar um arquivo vazio no windows com o seguinte comando:

type nul > C:\does\not\exist\file.txt 

o diretório não existe, então recebemos o erro:

 The system cannot find the path specified 

Se você imprimir o %errorlevel% a saída será:

 echo %errorlevel% 0 

No entanto, o comando não foi bem sucedido!

Notei que o Windows não define %errorlevel% do último comando se você usa redirecionamento.

Existe uma maneira de contornar isso?

Você pode usar o seguinte:

 C:\>type nul > C:\does\not\exist\file.txt && echo ok || echo fail The system cannot find the path specified. fail C:\>echo %errorlevel% 1 

Eu sempre assumi o && e || operadores usaram ERRORLEVEL, mas aparentemente não.

Muito curioso que ERRORLEVEL é definido após erro de redirecionamento somente se você usar o || operador. Eu nunca teria adivinhado. Nem jamais teria me dado ao trabalho de testar se não fosse pela sua excelente pergunta.

Se tudo o que você quer fazer é definir o ERRORLEVEL após falha de redirecionamento, então é claro que você pode simplesmente fazer:

 type nul > C:\does\not\exist\file.txt || rem