2010-02-02 14 views
7

Estoy intentando eliminar algunos archivos con caracteres Unicode en ellos con la secuencia de comandos por lotes (es un requisito). Así que corro cmd y ejecutar:La secuencia de comandos por lotes no se ejecuta si se llamó a chcp

> chcp 65001 

establecer eficazmente a la página de códigos UTF-8. Y funciona:

D:\temp\1>dir 
Volume in drive D has no label. 
Volume Serial Number is 8C33-61BF 

Directory of D:\temp\1 

02.02.2010 09:31 <DIR>   . 
02.02.2010 09:31 <DIR>   .. 
02.02.2010 09:32    508 1.txt 
02.02.2010 09:28    12 delete.bat 
02.02.2010 09:20    95 delete.cmd 
02.02.2010 09:13 <DIR>   Rún 
02.02.2010 09:13 <DIR>   Гуцул Каліпсо 
       3 File(s)   615 bytes 
       4 Dir(s) 11 576 438 784 bytes free 

D:\temp\1>rmdir Rún 

D:\temp\1>dir 
Volume in drive D has no label. 
Volume Serial Number is 8C33-61BF 

Directory of D:\temp\1 

02.02.2010 09:56 <DIR>   . 
02.02.2010 09:56 <DIR>   .. 
02.02.2010 09:32    508 1.txt 
02.02.2010 09:28    12 delete.bat 
02.02.2010 09:20    95 delete.cmd 
02.02.2010 09:13 <DIR>   Гуцул Каліпсо 
       3 File(s)   615 bytes 
       3 Dir(s) 11 576 438 784 bytes free 

entonces puse las mismas rmdir comandos de script por lotes y guardar en codificación UTF-8. Pero cuando corro no pasa nada, literalmente nada: ni siquiera el eco funciona desde el script por lotes en este caso. Incluso el script de guardado en la codificación OEM no ayuda.

Parece que cuando cambio la página de códigos a UTF-8 en la consola, los scripts simplemente dejan de funcionar. ¿Alguien sabe cómo arreglar eso?

+0

Reflexionando y escribiendo una respuesta real pronto, pero dos preguntas: ¿Se aseguró de que su archivo por lotes no tenga U + FEFF al inicio? ¿Y puede usar VBScript quizás en lugar de un archivo por lotes? El soporte de Unicode es mucho más fácil allí. – Joey

+0

no, no hay lista de materiales en el archivo por lotes. Puedo usar VBS, pero solo quería saber si mi problema se puede resolver directamente. – Andy

+0

Tal vez pueda; Hace algún tiempo, hice algunos progresos con Unicode en archivos por lotes, pero de ningún modo es bonito y, en el mejor de los casos, era irregular. – Joey

Respuesta

8

Si desea que Unicode sea compatible con el archivo de proceso por lotes, entonces CHCP solo en una línea aborta el archivo por lotes. Lo que sugiero es poner CHCP en cada línea del archivo por lotes que necesita Unicode de la siguiente manera

chcp 65001 > nul && <real command here> 

Ejemplo: En mi caso, yo quería tener una buena cola de mi archivos de registro durante la depuración, pero el contenido, incluso para Latin-1 los personajes estaban siendo desordenados. Así que aquí está mi archivo de proceso por lotes que envuelve la implementación de la cola real desde el Kit de recursos de Windows.

@C:\WINDOWS\system32\chcp.com 65001 >nul && tail.exe -f %1 

Además, para enviar a una consola, debe establecer una fuente de tipo verdadero, es decir, la consola Lucidia.

Y al parecer para la salida a un archivo de la línea de comandos necesita para funcionar como Unicode, por lo que tendría inicio a la secuencia de comandos por lotes de la siguiente manera

cmd /u /c <batch file command here> 

responsabilidad: Probado en el SP3 de Windows XP con el Kit de recursos de Windows.

+0

Entonces tal vez 'chcp 65001 && path \ to \ batchfile.bat' también ¿trabajo? – tripleee

0

El soporte Unicode en la consola, y especialmente en los archivos por lotes, es bastante malo. ¿Se puede "torcer" el requisito de decir PowerShell o Active Scripting (VBScript o JScript)?

que le ahorrará muchos dolores de cabeza en el largo plazo (si usted necesita para hacer crecer este más allá de esta simple tarea)

no hablar de que tanto PowerShell y ActiveScripting utilizan de manera más potentes lenguajes, lo que permite funciones, bucles correctos, variables reales, depuradores, muchos extras para un proyecto más serio.

+0

Sí, puedo. Solo quería averiguar, ¿es posible resolver este error (en realidad, es un error, no lo es) de manera directa ... – Andy

0

Intente insertar una línea en blanco como la primera línea en el archivo por lotes ...

Línea 1:

Línea 2: CHCP 65001

Línea 3: La escritura de commmands

debería funcionar !

+0

Lo siento, lo olvidé: asegúrese de que el archivo BAT se haya guardado como UTF-8 –

+0

¿Por qué debería funcionar? Amplíe agregando casos de prueba, si es posible. – adamdunson

+0

Con Win7 esto funciona, pero entonces no tiene ningún problema con chcp 65001, con o sin una línea vacía. Con XP esto aún falla. – jeb

Cuestiones relacionadas