2010-11-16 16 views
7

Ho bisogno di copiare più file in un singolo file batch. I file hanno nomi Unicode che si associano a diverse codepage.batch di Windows: parametri Unicode per il comando di copia (robo)

Esempio:

set ArabicFile=ڊڌڵڲڛشس 
set CyrillicFile=щЖЛдЉи 
set GermanFile=Bücher 

copy %ArabicFile% SomePlaceElse 
copy %CyrillicFile% SomePlaceElse 
copy %GermanFile% SomePlaceElse 

Problema: file batch non può essere Unicode.

Domanda: Come posso scrivere i nomi dei file Unicode nel file batch in modo che il comando di copia li riconosca?

Note:

non mi interessa come vengono visualizzati i nomi dei file.
In realtà il file batch fa molto di più che copiare semplicemente questi file, ho solo semplificato la descrizione per chiarire il problema.

Corretto file batch:

Con la risposta di Arnout ho modificato il mio file batch come segue. Ora funziona correttamente senza richiedere un cambio di font (che sarebbe disordinato, come ha commentato Arnout).

@echo off 

chcp 65001 

set ArabicFolder=ڊڌڵڲڛشس 
set CyrillicFolder=щЖЛдЉи 
set GermanFolder=Bücher 

robocopy /e d:\temp\test\%ArabicFolder% d:\temp\test2\%ArabicFolder% /log:copy.log 
robocopy /e d:\temp\test\%CyrillicFolder% d:\temp\test2\%CyrillicFolder% /log+:copy.log 
robocopy /e d:\temp\test\%GermanFolder% d:\temp\test2\%GermanFolder% /log+:copy.log 

risposta

12

Se

  • aggiungo CHCP 65001 come la prima riga del file batch,
  • salvare il file come UTF-8 senza BOM, e
  • impostare il mio carattere della console a qualcosa di diverso da "Raster Caratteri "(sulla mia casella Win7 posso scegliere Consolas o Lucida Console),

funziona. Semplice, no? :-)

(Il cambiamento di carattere in realtà non è necessaria, a condizione che non state scrivendo uscita non ASCII alla console.)

+0

La modifica del carattere * può * essere necessaria se si intende utilizzare l'output del comando che può contenere Unicode;) – Joey

+0

Umm, sì, questo è ciò che intendevo con "purché non si scriva output non ASCII alla console" ... – Arnout

+0

Fantastico, funziona ;-) Solo gotcha: come si imposta il carattere da un file batch? Il file batch deve essere eseguito su più computer e non posso riconfigurarli prima di eseguire il mio script. E la modifica del carattere è necessaria - se non cambio il carattere, i comandi impostati falliscono. –

1

Io non sono certo, ma penso che il breve (8.3) il nome del file sarà ASCII, così si potrebbe fare riferimento a quel modo? È possibile trovare il nome file breve con dir /X.

+0

Buona idea! Tuttavia, non può utilizzare la soluzione nel mio caso, poiché il file batch deve essere eseguito su più sistemi e i nomi brevi potrebbero differire da un computer all'altro (ad esempio, quando l'ordine in cui i file sono stati creati non era identico). –

+0

La generazione del nome di file brevi può essere disabilitata, quindi non si dovrebbe mai fare affidamento su di essi. – Philipp

0

voglio creare un file batch (ad es RunThis.bat) che crea directory di nomi che possono essere russi o altri.

Esempio:
Quando DOS di Windows è aperto con il richiamo:

D:\>md "Russia - Шпионка" 

Questo lavoro in comando come e il nome vengono visualizzati correttamente.

Ma se provo a usare Blocco note e salvo in ANSII, non posso.
Quindi, se uso nuovamente Blocco note e salvo in UTF-8, funzionerà ma con caratteri illeggibili.

RunThis.bat (Blocco note salva UTF-8), fornire caratteri inutili.

chcp 65001 
set fn14="Russia - Шпионка" 
md %fn14% 

Il problema con notepad utilizza UTF-8 con BOM.

Per salvare il .bat utilizzando UTF-8 senza BOM, è necessario utilizzare un editor come Notepad ++.

RunThis.bat (Notepad ++ salvare UTF-8 - senza BOM)

chcp 65001 
set fn14="Russia - Шпионка" 
md %fn14% 

Questa volta il suo lavoro perfettamente quando si corre “RunThis.bat” direttamente dal explorer.exe

Problemi correlati