2010-12-04 2 views
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éxt.pdf станет text.pdf при анализе.

Небольшой вопрос: я не пробовал использовать 7zip, было бы проще добиться того же самого с помощью 7zip?

Большое спасибо за помощь.

+0

Какое изменение вы видите? Вы говорите, что имена файлов должны быть в ASCII, но вы говорите, что они Unicode. Вы хотите, чтобы они каким-то образом были преобразованы? Тест с использованием 7zip сохраняет символы Unicode. У меня нет рэра. – 2010-12-04 14:57:44

+0

Извините, я был расплывчатым. Я добавил дополнительную информацию. Я просто хотел бы получить файл rar без изменения его имени. Вероятно, я бы попробовал 7zip. – 2010-12-04 16:59:26

ответ

0

RAR.exe обрабатывает свою командную строку в наборе символов OEM (т. Е. Не unicode). Единственный способ передать ему имя юникода - через файл списка, когда также использовать аргумент, чтобы указать, что файл списка является unicode. Однако это работает только для файлов внутри архива (EDIT: или файлы, которые вы хотите добавить в архив). Для самого архивного имени я не знаю решения, кроме ...

Если вы используете 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 для всех деталей.

Надеюсь, что это поможет!

Смежные вопросы