如何批量生成带有Unicode名称的文件

时间:2010-12-04 12:41:54

标签: windows shell winrar

我写了一个小的批处理文件来rar文件夹中所有子文件夹中的所有内容。它工作正常,除了文件名应该是ASCII。以下是工作小代码:

@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更容易实现同样的目标吗?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

RAR.exe在OEM字符集中处理其命令行(即不是unicode)。我知道将unicode名称传递给它的唯一方法是通过列表文件,同时使用参数指定列表文件是unicode。但是,这仅适用于 in 归档文件(编辑:或要添加到归档中的文件)。对于存档名称本身,我不知道除了......

之外的解决方案

如果您使用WinRAR.exe而不是RAR.exe,那么您可以在命令行上传递unicode文件名,它们可以正常工作。您将看到GUI进度窗口,但除此之外(对您来说可能或不重要)WinRAR.exe适合从批处理脚本运行。

批处理脚本本身是否可以处理我不知道的unicode,但如果这是剩下的唯一问题,我将切换到使用VBScript或JScript而不是批处理文件。 (无论如何,这是值得做的,IMO。我不是VBScript和JScript的忠实粉丝,但至少他们没有完全疯狂,神秘的语义和批处理等限制。))

顺便说一下,如果你确实使用WinRAR.exe,你可能想要获得最近的WinRAR 4(目前是beta 2),因为它包含了指定工作目录的功能,以前只能使用rar.exe。如果您需要从只读目录添加文件,这可能是必不可少的。

如果您想了解我提到的列表文件,请查看RAR.exe文本文件或WinRAR.exe内置在线帮助以获取所有详细信息。

希望有所帮助!