2009-05-04 3 views
2

Я пытаюсь вырезать некоторые rar, которые находятся в некоторых zip-файлах в некоторых каталогах. Короче говоря, это моя петля через файлы rar:Batch extract rars с пробелами в именах

for %%r in (*.rar) do (

unrar x %%r 
) 

Проблема в том, что %% r получает неправильное значение. Если имя файла «file name.rar», то %% r получает значение «файл» - оно останавливается в первом месте в имени файла.

Как получить этот цикл для работы с файлами с пробелами в именах?

Спасибо

ответ

1

Попробуйте это:

for /f "usebackq delims==" %i in (`dir /b *.rar`) do unrar x "%i" 

Если вы используете его в пакетном файле, помните, что вам нужно будет удвоить знаки процента, чтобы избежать их.

+0

Большое спасибо. – Bojan

0

Проблема заключается в том, что «для» использует пространство по умолчанию разделителями. Вы можете установить это, используя delims = xxx. посмотрите here для синтаксиса. Или вы можете использовать ForFiles.

+0

cmd также не является оболочкой UNIX, которая делает глобусы везде, где видит звездочку. Для каждого файла rar у вас будет полное имя файла, содержащееся в %% r, независимо от того, что оно имеет пробелы или нет. – Joey

1

%%r будет содержать полное имя файла, включая пробелы. Это ваш звонок unrar, у которого есть проблема. Если имя файла содержит пробелы, вы должны заключить его в кавычки, иначе unrar не сможет увидеть, что два (с пространственным разделением) параметров file и name.rar - это фактически одно имя файла с пробелом.

Так следующий будет работать:

for %%r in (*.rar) do unrar "%%r" 

Кроме того, если вы Aer любопытно, где эта проблема лежит, иногда очень полезно просто заменить вызов программы с помощью эха:

for %%r in (*.rar) do @echo %%r 

где вы увидит, что %% r содержит пробелы в именах файлов и не разделяет их.

+0

Я подумал об этом, но это все равно не сработает. Это означает, что %% r действительно имел неправильное значение, и цитаты могли бы многое сделать. Возможно, у меня что-то еще не так ... Я не знаю. – Bojan

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