Windows-batch: Unicode-parametre til (robo) kopieringskommando

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg skal kopiere flere filer i en enkelt batchfil. Filerne har Unicode navne, der kortlægges til forskellige kodekser.


Eksempel:


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

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


Problem: Batchfiler kan ikke være Unicode.


Spørgsmål: Hvordan kan jeg skrive Unicode-filnavne til batchfilen, så kopikommandoen genkender dem?


Bemærkninger:


Jeg er ligeglad med, hvordan filnavne vises.

Faktisk gør batchfilen meget mere end bare at kopiere disse filer, jeg har netop forenklet beskrivelsen for at gøre problemet klarere.


Korrekt batchfil:


Med Arnouts svar ændrede jeg min batchfil som følger. Det fungerer nu korrekt uden at kræve en skrifttypeændring (som ville være rodet, som Arnout kommenterede).


@echo off

chcp 65001

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

robocopy /e d:	emp	est\%ArabicFolder\% d:	emp	est2\%ArabicFolder\% /log:copy.log
robocopy /e d:	emp	est\%CyrillicFolder\% d:	emp	est2\%CyrillicFolder\% /log+:copy.log
robocopy /e d:	emp	est\%GermanFolder\% d:	emp	est2\%GermanFolder\% /log+:copy.log

Bedste reference


Hvis



  • Jeg tilføjer CHCP 65001 som den første linje i din batchfil,

  • Gem filen som UTF-8 uden BOM, og

  • Indstil min konsol skrifttype til noget andet end 'Raster Fonts' (i min Win7-boks kan jeg vælge Consolas eller Lucida Console),



det virker. Enkelt, nej? :-)


(Fontændringen er faktisk ikke nødvendig, forudsat at du ikke skriver ikke-ASCII-output til konsollen.)

Andre referencer 1


Jeg er ikke sikker, men jeg tror, ​​at det korte (8.3) filnavn vil være ASCII, så du kan henvise til det på den måde? Du kan finde ud af det korte filnavn med dir /X.

Andre referencer 2


Jeg vil oprette en batchfil (fx RunThis.bat), der skaber mapper med navne, der kan være russere eller andre.


Eksempel:

Når DOS Windows er åben med prompt:


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


Dette arbejde i kommando som og navnet vises korrekt.



Men hvis jeg forsøger at bruge Notepad og gemme i ANSII, kan jeg ikke.

Så hvis jeg bruger Notepad igen og gemmer i UTF-8, vil det fungere, men med skraldespand.


RunThis.bat (Notesblok gemme UTF-8), giv garbage tegn.


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


Problemet med notesblok det bruger UTF-8 med BOM.


For at gemme .bat ved hjælp af UTF-8 uden BOM skal vi bruge editor som Notesblok ++.


RunThis.bat (Notesblok ++ Gem UTF-8 - Ingen BOM )



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


Denne gang virker det perfekt, når vi kører 'RunThis.bat' direkte fra explorer.exe