2010-11-16 25 views
7

我需要在一個批處理文件中複製多個文件。這些文件具有映射到不同代碼頁的Unicode名稱。Windows批處理:(robo)複製命令的Unicode參數

實施例:

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

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

問題:批處理文件不能是Unicode。

問題:如何將Unicode文件名寫入批處理文件,以便複製命令識別它們?

注:

我不在乎文件名的顯示方式。
其實批處理文件不僅僅是複製這些文件,我只是簡化了描述,使問題更清晰。

正確的批處理文件:

隨着Arnout的回答我修改我的批處理文件,如下所示。它現在可以正常工作而不需要更改字體(這會很麻煩,就像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 

回答

12

如果

  • 我添加CHCP 65001爲您的批處理文件的第一行,
  • 將文件保存爲UTF-8無BOM和
  • 設置我的控制檯字體比「光柵別的東西字體「(在我的Win7框中,我可以選擇Consolas或Lucida Console),

它的工作原理。簡單,不是? :-)

(字體的變化其實是沒有必要的,只要你不是在寫非ASCII輸出到控制檯)。

+0

如果您打算使用可能包含Unicode的命令輸出,則可能需要更改字體*) – Joey 2010-11-16 12:23:16

+0

嗯,是的,這就是我的意思,「假設您不是將非ASCII輸出寫入控制檯」... – Arnout 2010-11-16 12:27:21

+0

很酷,這個工程;-)只有gotcha:我如何設置批處理文件中的字體?批處理文件將在多臺計算機上運行,​​並且在運行腳本之前我無法重新配置它們。並且需要更改字體 - 如果我不更改字體,set命令會失敗。 – 2010-11-16 14:05:29

1

我不能肯定,但我認爲短(8.3)文件名會ASCII,所以你可以參考這樣的說法?您可以使用dir /X找到短文件名。

+0

善於思考運行「RunThis.bat」直接!不過,在我的情況下,它不能使用您的解決方案,因爲批處理文件需要在多個系統上運行,並且計算機之間的短名稱可能不同(例如,創建文件的順序不相同時)。 – 2010-11-16 13:19:05

+0

短文件名的生成可以被禁用,所以你不應該依賴它們。 – Philipp 2010-11-16 17:58:31

0

我想創建一個批處理文件(如RunThis.bat)它創建的目錄可以是俄羅斯人或其他人的名字。

例:
當DOS窗口是打開提示:

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

這項工作在命令狀而得名正確顯示。

但是,如果我嘗試使用記事本,並保存在ANSII,我不能。
因此,如果我再次使用記事本並保存在UTF-8中,它將工作,但與垃圾字符。

RunThis.bat(記事本保存UTF-8),給垃圾字符。

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

問題與記事本,它使用UTF-8 BOM。

要使用UTF-8 保存.bat沒有 BOM,我們必須使用像Notepad ++這樣的編輯器。

RunThis.bat(記事本++保存UTF-8 - 沒有BOM

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

這一次它的工作完美,當我們從explorer.exe