Arquivo em lote simples falha no Windows Server 2012

0

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

echo Hello

Quando executado a partir do prompt 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 que efetuou login.

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 de anormal.

Alguma idéia do que está acontecendo?

EDITADO:

Por sugestão, modifiquei a entrada da linha de comando para remover aspas. Portanto, entrou o comando assim: echo echo Yowzer > test.bat Ran como: .\test.bat e obteve 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 de lixo. No entanto, se eu criar / salvar o arquivo no Bloco de Notas desde o início, ele funcionará corretamente.

Alguém pode duplicar isso?

    
por user340089 01.07.2014 / 00:53

4 respostas

1

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

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

A execução do arquivo em lote após a codificação a seguir reproduzirá o erro:

"echo test" | Out-File test.bat -Encoding unicode
    
por 07.10.2015 / 05:25
1

Tive o mesmo problema, pensei que estava louco.

Faça o seu arquivo em lote em outro computador. Eu tive o mesmo problema ao abrir o bloco de notas e digitando os comandos normalmente. Sempre me dava a mesma mensagem. Depois que eu recriou o arquivo em lote (não copiei o arquivo antigo) no meu dispositivo Win7 local, copiei-o de volta para o meu servidor Win 2012R2, trabalhei como um campeão.

    
por 02.02.2016 / 23:56
0

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

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

Você pode obter o xxd do download do 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 de lote do stdin. Bem, você pode explicar precisamente o que você quer dizer com isso, por exemplo, você quer dizer por copy con blah.bat e depois CTRL-Z? Mas do jeito que você quer dizer, é colocar alguns chars engraçados no arquivo.

adicionado

Eu vejo que você disse que fez isso com eco e redirecionamento ..

Você pode simplificar isso facilmente para solucionar problemas

Experimente type blah.bat

se isso mostrar um personagem engraçado, tente echo H>blah.bat , em seguida, edite-o para 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. O chcp irá alterar a codificação de entrada e saída, mas o chcp mostrará apenas a codificação de entrada.

Se você olhar minha resposta aqui link você vê um programa chamado chcpa que eu escrevi um tempo atrás, e você pode usar isso para alterar as codificações de entrada e saída mais flexivelmente do que o chcp. Ou você poderia apenas usar o chcp, mas se você achar que o chcp está limitando sua solução de problemas, então você pode tentar o chcpa.

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

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

    
por 06.09.2015 / 01:09
-1

O eco não usa aspas. Tire as aspas duplas e vai funcionar.

echo echo hello > test.bat

Echo procura pela string depois do eco e do espaço, as aspas quebram a string.

Mais informações sobre echo .

    
por 01.07.2014 / 02:09