Войти

Показать полную графическую версию : [решено] RAR.EXE Извлечь архивы из каталога и удалить


m3nthal
02-04-2012, 09:38
Здравствуйте!
Задача: в каталоге FROM лежат файлы типа *.rar;*.zip их надо извлечь в каталог DEST и, при успешном извлечении, удалить исходный архив, иначе оставить архив как есть.
Перелистал все ключи rar.exe и не нашел чем удалить архив после успешного извлечения, может у кого есть идеи?

Пока код такой:

@echo off
1>nul chcp 1251
set FROM="D:\!DOWNLOAD!\!!!ZIPRAR!!!\*.*"
set DEST="D:\!разобрать!"
"S:\Program Files\WinRAR\rar.exe" x -d %FROM% %DEST%

Iska
02-04-2012, 11:23
m3nthal, теоретически можно использовать команду «d» для удаления файлов из архива — пустой архив удаляется. Но это не лучший способ. Проще получать код возврата и принимать решение об удалении архива на его основании.

Это:
1>nul chcp 1251
лишнее. Просто сохраняйте пакетный файл в кодировке OEM/866.

«rar.exe» не работает (в отличие от «winrar.exe») с архивами любого формата, отличного от «*.rar».

Примерно так:
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=E:\Песочница\0133\Source
set sDestFolder=E:\Песочница\0133\Destination

if exist "%sSourceFolder%\." (
if exist "%sDestFolder%\." (
for %%i in ("%sSourceFolder%\*.rar" "%sSourceFolder%\*.zip") do (
<nul set /p sValue=%%i
"C:\Program Files\WinRAR\WinRAR.exe" x -y "%%i" "%sDestFolder%\" && (
<nul set /p sValue=Ok
del /f /q "%%i" && echo Deleted|| echo.
) || echo Error
)
) else (
echo Destination folder [%sDestFolder%] not found
)
) else (
echo Source folder [%sSourceFolder%] not found
)

endlocal
exit /b 0


Результат может выглядеть наподобие:
E:\Песочница\0133\Source\0001.rar Ok Deleted
E:\Песочница\0133\Source\0002.rar Ok Deleted
E:\Песочница\0133\Source\0003.rar Error
E:\Песочница\0133\Source\0004.zip Ok Deleted

NB!: одноимённые файлы в каталоге назначения переписываются «поверх» без запросов (параметр «-y» при «WinRar.exe»).

m3nthal
02-04-2012, 16:08
Спасибо за ответ.
Поменял переменные на свои папки, сменил кодировку, поменял путь к WinRAR.exe, запускаю и ничего. Папка исходная не пустая.
Не ругается и ничего не пишет.

Как у меня получилось
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=D:\!DOWNLOAD!
set sDestFolder=D:\!разобрать!

if exist "%sSourceFolder%\." (
if exist "%sDestFolder%\." (
for %%i in ("%sSourceFolder%\*.rar" "%sSourceFolder%\*.zip") do (
<nul set /p sValue=%%i
"S:\Program Files\WinRAR\WinRAR.exe" x -y "%%i" "%sDestFolder%\" && (
<nul set /p sValue=Ok
del /f /q "%%i" && echo Deleted|| echo.
) || echo Error
)
) else (
echo Destination folder [%sDestFolder%] not found
)
) else (
echo Source folder [%sSourceFolder%] not found
)

endlocal
exit /b 0



Windows 7 стоит. В чем может быть дело?

Iska
02-04-2012, 16:16
m3nthal, самым правильным будет — убрать из имён папок на диске восклицательные знаки, чтобы они назывались «D:\DOWNLOAD» и «D:\разобрать». Можете это сделать?

gora
02-04-2012, 16:25
самым правильным будет — убрать из имён папок на диске восклицательные знаки »
Я бы добавил:
Взять за правило ни когда не использовать в названиях папок и файлов любых спец. символов! Так Вы сможете уберечь себя от "наступания на грабли", которые сами же и раскладываете.

m3nthal
03-04-2012, 12:16
Убрал вопросы из названия и заработало! Спасибо большое! Как ни приду сюда на форум, всегда помогут, в столь смутное время этот факт очень радует.

bomiva
26-01-2022, 07:01
Iska, подскажите , можно ли модифицировать этот скрипт чтобы и 7z архивы видел?

megaloman
26-01-2022, 16:03
bomiva, Iska 10 дней не проявлялся, беру на себя наглость предложить: @Echo Off
cls
Set "BoxArc=Z:\Soft_Arc"
Set Mask="*.rar" "*.Zip" "*.7z"

Set "OutBox=Z:\Soft_Out"

Set Arc="C:\Program Files\WinRAR\WinRar.exe" x -y -ibck

Pushd "%BoxArc%"||(Echo !!! Folder "%BoxArc%" not found &Pause &Exit /B 2)
If Not Exist "%OutBox%" (Echo !!! Folder "%OutBox%" not found &Pause &Exit /B 2)

FOR /F "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D %Mask%`) DO (
Echo "%BoxArc%\%%f"
%Arc% "%BoxArc%\%%f" "%OutBox%\" &&(Del "%BoxArc%\%%f" &&Echo "%BoxArc%\%%f" deleted)
)

Popd
pause
Exit /B
Примечание: этот вариант кода не ломается от присутствия "!" в именах, например:
Set "BoxArc=Z:\!!! Soft_Arc !!!"
Set "OutBox=Z:\!!! Soft_Out !!!"




© OSzone.net 2001-2012