Как распаковать все архивы rar во все подпапки папки и затем удалить архивы?
Я хочу распаковать все файлы в некоторых подпапках, которые находятся в главной папке, удалить файлы xxx.rar после распаковки и переместить папку с файлами в другое место.
- Основная папка
- Sub Folder1 (с файлами.rar)
- Sub Folder2 (с файлами.rar)
- Sub Folder3 (с файлами.rar)
Это мой пакетный скрипт и работает до сих пор.
SET "sourcefolder=C:\Users\Unpack"
FOR /R %sourcefolder% %%X in (*.rar) do (
pushd "%%~dpX"
"C:\Program Files\WinRAR\Rar.exe" x -y "%%X" "*.*" && del "*.rar"
popd
)
for /d /r %sourcefolder% %%x in (*) do move "%%x" "C:\Users\New-Location")
Но я хочу, чтобы каждая подпапка, чьи файлы были распакованы, немедленно перемещалась в папку "New-Location", а не только после того, как все было распаковано в основную папку.
Некоторые идеи, что я должен изменить в коде?
1 ответ
Надеюсь, этот маленький пакетный код сделает то, что вы хотите.
@echo off
set "SourceFolder=C:\Users\Unpack"
set "TargetFolder=C:\Users\New-Location"
if not exist "%TargetFolder%" md "%TargetFolder%"
"%ProgramFiles%\WinRAR\Rar.exe" x -ad -cfg- -idq -r -y "%SourceFolder%\*.rar" "%TargetFolder%"
del /F /Q /S "%SourceFolder%\*.rar">nul
for /D %%D in ("%SourceFolder%\*") do rd "%%D" 2>nul
Консольная версия Rar.exe
является более мощным, чем большинство пользователей, никогда не читающих руководство Rar.txt
хранятся в папке программных файлов WinRAR в курсе.
Распаковать все файлы *.rar во все подпапки исходной папки можно непосредственно с помощью Rar.exe
как это можно видеть, потому что цикл не используется в пакетном коде. Rar.exe
поддерживает шаблоны для распаковки архивных файлов RAR и переключения -r
используется по команде x
приводит к обработке всех архивных файлов RAR также во всех подпапках, как объясняется в руководстве.
вариант -ad
то есть добавление имени архива к пути назначения может быть удалено из командной строки RAR, если все архивы содержат уникальное имя папки или все архивы должны быть распакованы в один каталог с перезаписью уже существующих файлов из предыдущего архива, распакованного ранее. Использование -ad
зависит от содержимого архивных файлов.
вариант -idq
означает тихий режим, то есть вывод только сообщений об ошибках, но без информации о прогрессе, которая быстрее.
Удаление всех файлов *.rar после их распаковки также выполняется без цикла for, поскольку команда del также поддерживает удаление всех файлов *.rar во всех подпапках папки.
Редактировать:
Чтобы после удаления всех файлов RAR все подпапки в исходной папке были пустыми, но при этом сохранить исходную папку, цикл наконец необходим для добавления, как добавлено в код выше.
Неполные подпапки игнорируются командой rd, потому что параметры /S /Q
не используются, что приведет к удалению подпапки, даже если она еще не полностью пуста.
Сообщение об ошибке вывода rd в stderr, если удаляемая подпапка не пуста, перенаправляется на устройство nul для его подавления.
Чтобы удалить все подпапки исходной папки независимо от того, что эти подпапки содержат после распаковки всех архивов RAR, но сохранить исходную папку, последние две строки вышеуказанного пакетного кода необходимо заменить следующей строкой:
for /D %%D in ("%SourceFolder%\*") do rd /S /Q "%%D" 2>nul
А для удаления исходной папки со всеми ее подпапками последние две строки приведенного выше пакетного кода необходимо заменить следующей строкой:
rd /S /Q "%SourceFolder%" 2>nul
Примечание. Папка может быть удалена с помощью rd, только если она не является текущим рабочим каталогом для любого работающего процесса в Windows.
Справку по каждой команде, используемой в командном файле, можно прочитать, открыв окно командной строки и запустив там:
del /?
for /?
if /?
md /?
rd /?
set /?
"%ProgramFiles%\WinRAR\Rar.exe" /?