• XSS.stack #1 – первый литературный журнал от юзеров форума

cmd/bat распаковка архива с автоудалением после распаковки

SingleAdwice

(L1) cache
Пользователь
Регистрация
05.08.2020
Сообщения
508
Реакции
448
Депозит
0.0007
Сабж, требуется распаковать пару лямов архивов, чтобы каждый архив распаковался в папку с именем архива и затем исходный архив удалялся
если папка с таким именем уже существует и в ней уже есть файлы, то должна выполнятся перезапись

за решение накину 50$ на пиво
 
Решение
интересует решение задачи стандартными способами используя лишь средства вин
Ок. Powershell. А он же .NET. Заюзаем новомодные фичи, не малварь же пишем под все ОС. Таргет WIN 10, думаю уже все обновились?))
Powershell 5+.
The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array.
EnumerateFiles возвращает итератор. Таким образом можно осуществить lazy перебор файлов, не загружая список всех файлов в RAM. Просто лениво итерируем и на каждую итерацию выполняем...
Код:
@echo off

setlocal


set "path=%path%;C:\Program Files\7-Zip"


pushd "путь к папке" || goto:eof

for /f "tokens=*" %%i in ('dir /b /s /a *.zip *.rar *.7z') do (
    7z x "%%i" -o"%%~dpni" -aoa
    del "%%i"
)

popd
pause

Для работы нужен 7зип
 
Последнее редактирование:
Код:
@echo off

setlocal


set "path=%path%;C:\Program Files\7-Zip"


pushd "путь к папке" || goto:eof

for /f "tokens=*" %%i in ('dir /b /s /a *.zip *.rar *.7z') do (


    7z x "%%i" -o"%%~dpni" -aoa

)

popd

Для работы нужен 7зип
сейчас потестю
 
Забыл про удаление исходного архива. Поправил и отредачил первый пост
вывод процесса в консоль идёт?
и нужно ли указывать фулл путь до именно exe 7z в плане
C:\Program Files\7-Zip\7z.exe
 
вывод процесса в консоль идёт?
и нужно ли указывать фулл путь до именно exe 7z в плане
C:\Program Files\7-Zip\7z.exe
Да. Фулл путь не нужен. Меняешь только путь к папке c архивами ( я пометил, где )
 
Да. Фулл путь не нужен. Меняешь только путь к папке c архивами ( я пометил, где )
у меня просто консоль вообще ничего не выводит, тупо afk
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Так WinRar вроде и распаковать может каждый архив в отдельную папку, и заменить\пропустить в случае, если уже есть, и удалить архив потом труда не составит.
Зачем изобретать велосипед?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Пробую сейчас винраром, потихоньку парсит каждое имя из нескольких лямов архивов
И ещё, если у тебя большое кол-во архивов в одной папке, то лучше открыть непосредственно WinRar и через сам софт заходить в папку и выполнять нужные операции.
Если просто через файловый менеджер войти в папку, выделить лям-два-три архивов и нажать на них правой кнопкой, чтобы распаковать каждый в отдельную папку, то всё это затянется раза в 4 по времени.
 
И ещё, если у тебя большое кол-во архивов в одной папке, то лучше открыть непосредственно WinRar и через сам софт заходить в папку и выполнять нужные операции.
Если просто через файловый менеджер войти в папку, выделить лям-два-три архивов и нажать на них правой кнопкой, чтобы распаковать каждый в отдельную папку, то всё это затянется раза в 4 по времени.
так и делаю, скорость не ахти, но что поделать
 
Пожалуйста, обратите внимание, что пользователь заблокирован
так и делаю, скорость не ахти, но что поделать
Быстрее будет на процентов 30 через консоль, но я всегда использовал WinRar, просто делал это на серваке.
Кто выиграл то твои 50$? :)
 
Быстрее будет на процентов 30 через консоль, но я всегда использовал WinRar, просто делал это на серваке.
Кто выиграл то твои 50$? :)
учитывая что я пока так и не распаковал всё - никто по сути
 
Пожалуйста, обратите внимание, что пользователь заблокирован
учитывая что я пока так и не распаковал всё - никто по сути
Winrar не справился, или распаковывает до сих пор?
 
Winrar не справился, или распаковывает до сих пор?
Winrar не справился, или распаковывает до сих пор?
парсинг имён закончился, ориентировочно выдаёт от 350 до 700 часов работы )
 
Пожалуйста, обратите внимание, что пользователь заблокирован
SingleAdwice
Вот, создавай батник с таким "кодом":
@echo off
rem Распаковка всех .zip с последующим удалением
setlocal enableextensions
for /f "delims=" %%f in ('dir /b /s *.zip') do (
"%ProgramFiles%\WinRAR\WinRar.exe" x -y "%%~f" "%%~dpnf\"
del /f /a "%%~f"
)
И все будет в фоне работать.
Батник закидывай в ту же папку, где архивы.
Проверил у себя, все работает отлично.
Как надоест, нажимай Ctrl+C.
Скрытый контент для пользователей: SingleAdwice.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх