Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] RAR.EXE Извлечь архивы из каталога и удалить (http://forum.oszone.net/showthread.php?t=231870)

m3nthal 02-04-2012 09:38 1891744

RAR.EXE Извлечь архивы из каталога и удалить
 
Здравствуйте!
Задача: в каталоге 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 1891781

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 1891967

Спасибо за ответ.
Поменял переменные на свои папки, сменил кодировку, поменял путь к 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 1891974

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

gora 02-04-2012 16:25 1891981

Цитата:

Цитата Iska
самым правильным будет — убрать из имён папок на диске восклицательные знаки »

Я бы добавил:
Взять за правило ни когда не использовать в названиях папок и файлов любых спец. символов! Так Вы сможете уберечь себя от "наступания на грабли", которые сами же и раскладываете.

m3nthal 03-04-2012 12:16 1892454

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

bomiva 26-01-2022 07:01 2978702

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

megaloman 26-01-2022 16:03 2978730

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 !!!"


Время: 18:44.

Время: 18:44.
© OSzone.net 2001-