1

我写了一个小批处理文件来解压文件夹内所有子文件夹中的所有内容。它工作正常,除了文件名应该是 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éext.pdf 解析时会变成 text.pdf 。

一个小问题:我没有尝试使用 7zip,用 7zip 实现同样的事情会更容易吗?

非常感谢您的帮助。

4

1 回答 1

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(目前是 beta 2),因为它包括指定工作目录的能力,以前只有 rar.exe 才有可能。如果您需要从只读目录添加文件,这可能是必不可少的。

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

希望有帮助!

于 2010-12-04T16:54:10.337 回答