2010-12-04 46 views
1

我編寫了一個小批處理文件來提取文件夾內所有子文件夾中的所有內容。它工作正常,除了文件名應該是ASCII。下面是工作小碼:如何在批處理文件中使用Unicode名稱

@REM ------- BEGIN rarthem.bat ---------------- 
@setlocal 
@echo off 
echo -------------------------------------------------- 
echo Starting to rar files 
echo -------------------------------------------------- 
echo. 
echo. 
echo. 
set path="C:\Program Files\WinRAR\";%path% 
for /D /r %%G in ("*") do (
    echo Storing files in %%G 
    echo -------------------------------------------------- 

    cd %%G 

    for %%I in (*.*) do (
     rar a -x*.rar -x*.zip -m0 -id[c] "%%~nI.rar" "%%I" 
     echo Done archiving %%~nI%%~xI 
    ) 

    echo -------------------------------------------------- 
    echo Done archiving %%~nG 
    echo -------------------------------------------------- 
    echo. 
    echo. 
    cd .. 
) 

echo Finished! 
pause 
REM ------- END rarthem.bat ------------------ 

我認爲問題發生在文件名被解析到WinRAR的以及WinRAR沒有問題文件歸檔與Unicode名稱。

編輯:將文件名解析爲WinRAR時,文件名會被修改,所以當WinRAR嘗試使用該名稱查找文件時,它找不到它。例如,一個文件:téxt.pdf在解析時會變成text.pdf。

一個小問題:我沒有嘗試過使用7zip,使用7zip實現同樣的功能會更容易嗎?

非常感謝您的幫助。

+0

你看到了什麼樣的變化?你說文件名應該用ASCII碼,但你說它們是Unicode。你想讓他們以某種方式轉換嗎?使用7zip的測試可保留Unicode字符。我沒有rar。 – 2010-12-04 14:57:44

+0

對不起,我含糊不清。我添加了更多信息。我只是想能夠在不改變名稱的情況下提交文件。可能我會給7zip一個嘗試。 – 2010-12-04 16:59:26

回答

0

RAR.exe在OEM字符集(即不是unicode)中處理其命令行。我知道將unicode名稱傳遞給它的唯一方法是通過列表文件,同時使用參數指定列表文件是unicode。但是,這隻適用於檔案檔案(編輯:或要添加到檔案中的文件)。對於檔案名稱本身我不知道除了...

如果您使用WinRAR.exe而不是RAR.exe,那麼你可以在命令行上傳遞unicode文件名,它們工作正常。您將看到一個GUI進度窗口,但除此之外(對您而言可能並不重要)WinRAR.exe適合從批處理腳本運行。

批處理腳本本身是否可以處理unicode我不知道,但如果這是唯一的問題,我會切換到使用VBScript或JScript而不是批處理文件。 (無論如何,IMO值得做,我不是VBScript和JScript的忠實粉絲,但至少他們沒有完全瘋狂,神祕的語義和像批處理這樣的限制:))

順便說一下,如果您確實使用WinRAR.exe,則可能需要獲取最近的WinRAR 4(測試版2),因爲它包含指定工作目錄的能力,以前只能使用rar.exe。如果您需要從只讀目錄添加文件,這可能很重要。

如果您想了解我提到的列表文件,請檢查RAR.exe文本文件文檔或WinRAR.exe內置在線幫助以瞭解所有詳細信息。

希望有幫助!

相關問題