2010-11-16 14 views
7

Tôi cần sao chép nhiều tệp trong một tệp lô duy nhất. Các tập tin có tên Unicode để ánh xạ tới các mã khác nhau.Lô Windows: Các tham số Unicode cho lệnh sao chép (robo)

Ví dụ:

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

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

Vấn đề: file hàng loạt không thể Unicode.

Câu hỏi: Làm cách nào để viết tên tệp Unicode vào tệp lô để lệnh sao chép nhận dạng chúng?

Ghi chú:

Tôi không quan tâm như thế nào tên tập tin được hiển thị.
Trên thực tế, tệp thực thi không chỉ sao chép những tệp này, tôi vừa đơn giản hóa mô tả để làm cho vấn đề rõ ràng hơn.

Đúng batch file:

Với câu trả lời Arnout của tôi sửa đổi tập tin thực thi của tôi như sau. Nó bây giờ hoạt động chính xác mà không đòi hỏi một sự thay đổi phông chữ (mà sẽ là lộn xộn, như Arnout nhận xét).

@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 

Trả lời

12

Nếu

  • tôi thêm CHCP 65001 như dòng đầu tiên của tập tin batch,
  • lưu tập tin như UTF-8 mà không BOM, và
  • thiết lập phông chữ console của tôi để cái gì khác hơn là "Raster Phông chữ "(trên hộp Win7 của tôi, tôi có thể chọn Consolas hoặc Lucida Console),

nó hoạt động. Đơn giản, phải không? :-)

(Sự thay đổi phông chữ thực sự là không cần thiết, với điều kiện bạn không viết ra phi ASCII ra cửa sổ Console.)

+0

Thay đổi phông chữ * có thể * cần thiết nếu bạn dự định sử dụng đầu ra lệnh có thể chứa Unicode;) – Joey

+0

Umm, vâng, đó là ý của tôi với "miễn là bạn không viết đầu ra không phải ASCII cho bàn điều khiển" ... – Arnout

+0

Cool, công trình này ;-) Chỉ gotcha: làm thế nào để tôi đặt phông chữ từ bên trong một tập tin thực thi? Các tập tin thực thi là để chạy trên nhiều máy tính và tôi không thể cấu hình lại chúng trước khi chạy kịch bản của tôi. Và thay đổi phông chữ là bắt buộc - nếu tôi không thay đổi phông chữ, các lệnh đặt không thành công. –

1

Tôi không chắc chắn, nhưng tôi nghĩ tên tệp ngắn (8.3) sẽ là ASCII, vì vậy bạn có thể tham khảo theo cách đó? Bạn có thể tìm ra tên tập tin ngắn với dir /X.

+0

Tốt suy nghĩ! Mặc dù vậy, nó không thể sử dụng giải pháp của bạn vì tệp batch cần chạy trên nhiều hệ thống và tên ngắn có thể khác nhau giữa các máy tính (ví dụ khi thứ tự các tệp được tạo không giống nhau). –

+0

Tạo tên tệp ngắn có thể bị tắt, vì vậy bạn không nên dựa vào chúng. – Philipp

0

Tôi muốn tạo ra một tập tin thực thi (ví dụ RunThis.bat) mà tạo ra các thư mục của tên có thể là người Nga hoặc người khác.

Ví dụ:
Khi DOS Windows mở cửa với dấu nhắc:

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

Công việc này trong lệnh như và tên xuất hiện một cách chính xác.

Nhưng nếu tôi thử sử dụng Notepad và lưu trong ANSII, tôi không thể.
Vì vậy, nếu tôi sử dụng lại Notepad và lưu trong UTF-8, nó sẽ hoạt động nhưng với các ký tự rác.

RunThis.bat (Notepad save UTF-8), cho ký tự rác.

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

Vấn đề với notepad nó sử dụng UTF-8 với BOM.

Để lưu .bat sử dụng UTF-8 mà không cần BOM chúng tôi phải sử dụng trình soạn thảo như Notepad ++.

RunThis.bat (Notepad ++ lưu UTF-8 - không BOM)

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

thời gian này công việc của mình một cách hoàn hảo khi chúng ta chạy “RunThis.bat” trực tiếp từ explorer.exe

Các vấn đề liên quan