Распаковка всех.bz2 архивов в каталог

У меня есть каталог под названием "вход", полный подкаталогов, которые содержат несколько архивов bz2. Вот так:

-input
--folder1
---archive1.bz2
----archive1.content
---archive2.bz2
----archive2.content
---archive3.bz2
----archive3.content
--folder2
---archive4.bz2
----archive4.content
---archive5.bz2
----archive5.content
---archive6.bz2
----archive6.content

Я пытаюсь написать пакетный скрипт Windows для извлечения содержимого каждого архива в новую папку "output", сохраняя при этом внутреннюю файловую структуру, так что в итоге мы получим следующее:

-output
--folder1
---archive1.content
---archive2.content
---archive3.content
--folder2
---archive4.content
---archive5.content
---archive6.content

Пока у меня есть этот скрипт:

for /R "C:\Users\Ed\Desktop\input" %%I in ("*.bz2") do (

  "%ProgramFiles%\WinRAR\WinRAR.exe" x "%%I" *.* "C:\Users\Ed\Desktop\output"
)

Извлечение работает, но не упаковывает содержимое в папку folder1, folder2 и т. Д.

Я чувствую, что мне нужно создать новую папку для родительской папки каждого архива, а затем установить ее в качестве выходного каталога. Что-то вроде этого:

for /R "C:\Users\Ed\Desktop\input" %%I in ("*.bz2") do (
    mkdir "C:\Users\Ed\Desktop\output\parent folder of %%I"
    "%ProgramFiles%\WinRAR\WinRAR.exe" x "%%I" *.* "C:\Users\Ed\Desktop\output\parent folder of %%I"
)

Но как мне получить указатель на имя родительской папки?

1 ответ

FOR Команда поддерживает некоторые магические символы, которые извлекают части переменной %%I. использование FOR /? за помощью.

В вашем случае это может сработать: mkdir "C:\Users\Ed\Desktop\output\%%~dI%%~pI"

Другие вопросы по тегам