El archivo por lotes simple falla en Windows Server 2012

El archivo por lotes simple falla en Windows Server 2012

En un servidor Windows 2012, desde un administrador que inició sesión (local y de dominio), se creó un archivo por lotes "test.bat" redirigiendo la entrada de la consola a un archivo:

echo Hello

Cuando se ejecuta desde el indicador cmd de PowerShell como .\test.bat, se repite:

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

El archivo por lotes está en el directorio C:\users\%username% del usuario que inició sesión.

El archivo fue creado desde la consola, así:

echo "echo Hello" > test.bat

y luego editado con el Bloc de notas. Se veía bien en el Bloc de notas... nada inusual.

¿Alguna idea sobre lo que está pasando?

EDITADO:

Por sugerencia, modifiqué la entrada de la línea de comando para eliminar las comillas. Por lo tanto, ingresé el comando así: echo echo Yowzer > test.bat Ejecuté como: .\test.baty obtuve la misma respuesta que arriba. También tenga en cuenta que si edito en el Bloc de notas el test.bat anterior (es decir, creado en la línea cmd) y lo vuelvo a ejecutar, todavía devuelve una respuesta basura. Sin embargo, si creo/guardo el archivo en el Bloc de notasdesde el comienzo,Funciona correctamente.

¿Alguien puede duplicar esto?

Respuesta1

Parece que la redirección >ha codificado su archivo por lotes en Unicode, cuando debería ser ASCII. En Powershell, use Out-Fileen lugar de la redirección como esta:

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

Ejecutar el archivo por lotes después de la siguiente codificación reproducirá el error:

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

Respuesta2

Tuve el mismo problema, pensé que estaba loco.

Cree su archivo por lotes en otra computadora. Tuve el mismo problema al abrir el Bloc de notas y escribir los comandos normalmente. Siempre me dio el mismo mensaje. Una vez que recreé el archivo por lotes (no copie el archivo antiguo) en mi dispositivo Win7 local, lo copié nuevamente en mi servidor Win 2012R2 y funcionó como un campeón.

Respuesta3

Lo más probable es que tengas algún personaje divertido en alguna parte. Estoy bastante seguro de que si lo hace, xxd -p blah.batverá algunos personajes divertidos en su archivo por lotes.

Luego podrías pensar en cómo llegaron allí y eliminarlos. Y eso se puede hacer con xxd y sed. O quizás de otra manera, si sabes qué personajes son.

Puede obtener xxd descargando VIM 7.X o desde cygwin.

O puede buscar un editor hexadecimal y colocar el archivo por lotes en el editor hexadecimal.

Dice que está creando el archivo por lotes desde la entrada estándar. Bueno, podría explicar con precisión qué quiere decir con eso, por ejemplo, ¿se refiere a copy con blah.batCTRL-Z? Pero sea lo que sea lo que quieras decir, se trata de poner algunos caracteres divertidos en el archivo.

agregado

Veo que dices que lo hiciste con eco y redireccionamiento.

Puede simplificar esto fácilmente para solucionar algunos problemas.

Intentar type blah.bat

Si eso muestra un personaje divertido, entonces intenta echo H>blah.batconstruirlo según lo que escribiste... y ver en qué punto obtienes el personaje divertido.

Otra cosa con la que experimentar es la codificación de entrada y salida.

prueba chcp. chcp 850 y chcp 65001 y vea si ve alguna diferencia. chcp cambiará la codificación de entrada y salida, pero chcp solo le mostrará la codificación de entrada.

Si miras mi respuesta aquíhttps://stackoverflow.com/questions/30904504/font-is-right-why-cant-i-get-this-unicode-character-to-display-in-this-c-sharp/32418703#32418703 Ves un programa llamado chcpa que escribí hace un tiempo y puedes usarlo para cambiar las codificaciones de entrada y salida de manera más flexible que chcp. O simplemente podría usar chcp, pero si descubre que chcp lo limita en la resolución de problemas, puede probar chcpa.

Pero una de las mejores herramientas para solucionar problemas sería un editor hexadecimal o xxd como se mencionó. Y tratando de simplificar aún más su línea, como se sugiere.

Pasos como ese te ayudarán a aislar dónde está el error. Y comenta cuando intentes algo aquí o más allá.

Respuesta4

Echo no usa comillas. Elimina las comillas dobles y funcionará.

echo echo hello > test.bat

Echo busca la cadena después de echo y el espacio, las comillas rompen la cadena.

Más eneco.

información relacionada