Arquivo em lote simples falha no Windows Server 2012

Arquivo em lote simples falha no Windows Server 2012

Em um Windows 2012 Server, a partir de um administrador logado (local e domínio), criou um arquivo em lote "test.bat" redirecionando a entrada do console para um arquivo:

echo Hello

Quando executado no prompt do cmd do PowerShell como .\test.bat, ele ecoa:

'■e' is not recognized as an internal or external command,

O arquivo em lote está no diretório C:\users\%username% do usuário conectado.

O arquivo foi criado a partir do console, assim:

echo "echo Hello" > test.bat

e depois editado com o Bloco de Notas. Parecia bem no Bloco de Notas... nada incomum.

Alguma idéia do que está acontecendo?

EDITADO:

Por sugestão, modifiquei a entrada da linha de comando para remover aspas. Portanto, digitei o comando assim: echo echo Yowzer > test.bat Ran as: .\test.bate obtive a mesma resposta acima. Observe também que se eu editar no Bloco de Notas o test.bat acima (ou seja, criado na linha cmd) e executar novamente, ele ainda retornará uma resposta lixo. No entanto, se eu criar/salvar o arquivo no Bloco de Notasdo começo,funciona corretamente.

Alguém pode duplicar isso?

Responder1

Parece que o redirecionamento >codificou seu arquivo em lote em unicode, quando deveria ser ascii. No Powershell, use Out-Fileem vez do redirecionamento assim:

"echo test" | Out-File test.bat -Encoding ascii

Executar o arquivo em lote após a seguinte codificação reproduzirá o erro:

"echo test" | Out-File test.bat -Encoding unicode

Responder2

Tive o mesmo problema, pensei que estava louco.

Faça seu arquivo em lote em outro computador. Tive o mesmo problema ao abrir o Bloco de Notas e digitar os comandos normalmente. Sempre me deu a mesma mensagem. Depois de recriar o arquivo em lote (não copie o arquivo antigo) em meu dispositivo Win7 local, copiei-o de volta para meu servidor Win 2012R2 e funcionou como um campeão.

Responder3

Você provavelmente tem algum personagem engraçado em algum lugar. Tenho certeza de que, se você fizer xxd -p blah.batisso, verá alguns personagens engraçados em seu arquivo em lote.

Você poderia então pensar em como eles chegaram lá e removê-los. E isso pode ser feito com xxd e sed. Ou talvez de outra forma, se você souber quais personagens eles são.

Você pode obter o xxd baixando o VIM 7.X ou do cygwin

Ou você pode encontrar um editor hexadecimal e colocar o arquivo em lote no editor hexadecimal.

Você diz que está criando o arquivo em lote a partir do stdin. Bem, você poderia explicar exatamente o que quer dizer com isso, por exemplo, você quer dizer copy con blah.batCTRL-Z? Mas seja lá o que você queira dizer, é colocar alguns caracteres engraçados no arquivo.

adicionado

Vejo que você afirma que fez isso com echo e redirecionamento.

Você pode simplificar isso facilmente para solucionar alguns problemas

Tentar type blah.bat

se isso mostrar um personagem engraçado, tente echo H>blah.batconstruí-lo de acordo com o que você digitou.. e veja em que ponto você obtém o personagem engraçado.

Outra coisa para experimentar é a codificação de entrada e saída

tente chcp. chcp 850 e chcp 65001 e veja se você vê alguma diferença. chcp alterará a codificação de entrada e saída, mas chcp mostrará apenas a codificação de entrada.

Se você olhar minha resposta aquihttps://stackoverflow.com/questions/30904504/font-is-right-why-cant-i-get-this-unicode-character-to-display-in-this-c-sharp/32418703#32418703 você vê um programa chamado chcpa que escrevi há algum tempo e pode usá-lo para alterar as codificações de entrada e saída de maneira mais flexível do que o chcp. Ou você pode simplesmente usar o chcp, mas se achar que o chcp está limitando sua solução de problemas, você pode tentar o chcpa.

Mas uma de suas melhores ferramentas aqui para solução de problemas seria um editor hexadecimal ou xxd, conforme mencionado. E tentando simplificar ainda mais a sua linha, como sugerido.

Etapas como essa ajudarão você a isolar onde está o erro. E comente quando você tentar algo aqui ou mais.

Responder4

Echo não usa aspas. Retire as aspas duplas e funcionará.

echo echo hello > test.bat

Echo procura a string após echo e o espaço, as aspas quebram a string.

Mais sobreeco.

informação relacionada