Как извлечь архивы из dir / subdir /*.* в dir /% zipname% / - PullRequest
1 голос
/ 07 октября 2019

У меня есть куча архивов, которые я хочу извлечь. Проблема в том, что их много, и нужно много информации, чтобы передвигаться. Я хотел бы сделать все это сразу. Вероятно, на исследование ушло больше времени, чем на ручное, но исследование более интересно.

TL; DR: Хотелось бы помочь с командной строкой 7-zip для извлечения нескольких архивов в их собственный каталог. Ответы Autohotkey, Powershell и командных файлов также были бы полезны, если вы чувствуете себя очень полезным.

Win10 , последнее обновление и все такое. Я использовал 7-zip , поэтому, если есть лучший экстрактор для этого, это может быть полезным предложением. У меня небольшой опыт работы с кодированием, поэтому я обычно могу проанализировать пример и применить его к своему проекту, но сам не могу придумать код. С учетом вышесказанного я могу использовать cmd , autohotkey , powershell , командные файлы и несколько других, но янужен пример, прежде чем я смогу сделать что-нибудь. хаха

Итак, в своем исследовании я нашел (7z x -o "... \ Stellaris \ mod \ examples \" "... \ content \ 281990 \ *") для cmd , который работает, за исключением того, что извлекает все в один и тот же каталог, так как файлы архива находятся в корневом каталоге каталогов (я думаю, поэтому; если бы они были на одну папку вниз, он должен работать так, как я хочу?). Я не думаю вы можете использовать переменные окружения в пути (?). Не уверен, что заставило бы это работать здесь ...

Powershell : я только недавно начал возиться с этим, поэтому один сценарий, который я нашел, не имел никакого смысла для меня. И никогда не находил никого, кто бы использовал AutoHotKey для этого.

И, наконец, ** пакетный файл * Я нашел здесь , кажется, ближе всего (обычно я бы прокомментировал этопричина потока, очевидно, все еще активна, но у меня нет 50 повторений), но я не был уверен, как изменить его для моих целей:


@ echo off

SET"filename =% ~ 1" #Where does the working dir path go?

SET dirName =% filename: ~ 0, -4% #How/where would you put in wildcards?

7z x -o "% dirName%" "% filename%"


Я не против использовать какой-либо метод, хотя я бы предпочел AHK ? Я, наверное, самый опытный там.

Если вы сделали это так далеко, вау, я впечатлен! Я надеюсь, что это было достаточно последовательным, чтобы понять (вероятно, не сначала?). А может быть немного интереснее? Я думаю, что я смешной. Дайте мне знать, если я должен добавить или удалить что-нибудь в будущем. Я знаю, что это, вероятно, слишком много контекста, но я бы предпочел иметь слишком много, чем недостаточно, и я никогда не уверен, что будет иметь значение, а что нет. Я не доволен своим форматом кода здесь, но я не совсем понял, что говорит помощь о пробелах, и я еще недостаточно знаком с Markdown (я хотел, чтобы комментарии были в строке). Кроме того, я честно не уверен насчет тегов.

РЕДАКТИРОВАТЬ: добавлен TL; DR вверху, и ...

Нашел ответ через программуэто делает этоЯ также опубликую его в ответе: ExtractNow кажется немного устаревшим, последнее обновление было в 17 году, но оно сделало то, что я хотел.

Ответы [ 2 ]

0 голосов
/ 13 октября 2019

Нашел ответ через программу, которая это делает. ExtractNow выглядит немного устаревшим, последнее обновление было в 17 году, но оно сделало то, что я хотел, только с несколькими изменениями настроек.

0 голосов
/ 07 октября 2019

Для интерактивного использования в командной строке:

for %z in ("\path\to\dir\subdir\*.zip") do @echo 7z "-o\path\to\extracted\%~nz" "%~z"

Это не запустит 7z, но выведет команды. Как только вы убедитесь, что напечатанные команды выглядят нормально, удалите @echo для их выполнения.

В пакетном скрипте вы, конечно, должны продублировать знаки %.

...