Пакетный скрипт Windows для рекурсивного извлечения определенных файлов с помощью 7zip
У меня есть каталог с несколькими .tar файлами, которые имеют несколько .zip файлов. Древовидная структура примерно такого рода:
testDirectory
-tarArchive.tar
-directory1
-zipArchive11.zip
abc.XML
1.TIF
2.TIF
...
-zipArchive12.zip
xyz.XML
a.TIF
b.CDX
...
.
.
.
-directory2
-zipArchive21.zip
...
-zipArchive22.zip
...
.
.
.
.
.
Мне нужен один пакетный скрипт для рекурсивного извлечения только .XML из каждого .zip при сохранении древовидной структуры(сначала все .zip будут извлечены из main .tar, а затем только .XML из каждого .zip). Кроме того, обработанные архивы должны быть удалены впоследствии.
Я могу достичь большей части этого с помощью этого код
for /R "C:UsersfrozenfyrDesktoptest" %%I in ("*.zip", "*.tar") do (
"C:Program Files7-Zip7z.exe" x -y -o"%%~dpI" "%%~fI" && del "%%~fI"
)
Кроме двух вещей:
-
Я не могу извлечь только файлы
.XML."C:Program Files7-Zip7z.exe" x -y -o"%%~dpI" "%%~fI""*.zip" -rУилл не извлекать файлы XML и"C:Program Files7-Zip7z.exe" x -y -o"%%~dpI" "%%~fI""*.XML" -rне работает (не должно работать), потому что ничего не будет совпадать в файле.tar. Есть ли способ сделать что-то вроде"C:Program Files7-Zip7z.exe" x -y -o"%%~dpI" "%%~fI""*.zip" "*.XML" -r -
Основной файл
.tarне удаляется после обработки. Я попробовал это скрипт на.zipфайлы и он работает(они удаляются после обработка).
Я уже пробовал скрипт powershell, но он меня не очень устраивает. Я чувствую, что пакетный сценарий легко для меня обрабатывать. Я даже нашел сообщение на SU, но оно не говорит о нескольких конкретных форматах/файлах. Я прочитал руководство пользователя версии командной строки и рассмотрел -x переключатель , но это бесполезно.
Я не могу процитировать все ссылки здесь, но я действительно прошел через много сообщений SO и SU, и Google был возможно, на этот раз не мой друг. Я не уверен, что SO или SU должны быть местом, чтобы задать этот вопрос, я нашел хорошие ссылки на оба сообщества. Я использую так чаще, поэтому я здесь.
Пожалуйста, помогите мне, это сводит меня с ума..3 ответа:
Я был в состоянии решить мой 1-ый проблема. Второй выглядит немного сложным. Команда
delработает с архивами меньшего размера. Поскольку мой.tarогромен (>1 ГБ), я думаю, что следующий цикл начнет выполняться до того, как команда сможет удалить архив. Было бы хорошо для меня, если не для кого-то другого, иметь ответ здесь в качестве руководства для будущего.В любом случае, для первой задачи я обнаружил, что мне нужно будет сделать рекурсивную операцию с переключателем
-x, т. е.-xr, и потому я было несколько расширений, которые я хотел пропустить, я должен был создатьignore.txtи добавить все исключения там. Мой полный сценарий выглядел так:for /R "C:\Users\frozenfyr\Desktop\test" %%I in ("*.zip", "*.tar") do ( "C:\Program Files\7-Zip\7z.exe" x -y -xr@"C:\Users\frozenfyr\Desktop\ignore.txt" -o"%%~dpI" "%%~fI" && del "%%~fI" )Если бы у меня было только одно расширение, которое я хотел бы игнорировать, я бы сделал
-xr!"*.extension"вместо-xr@"C:\Users\frozenfyr\Desktop\ignore.txt"Кстати,
-xrне останавливает 7zip от обработки исключенных файлов, он, вероятно, удаляет их после извлечения, потому что я виделextracting abc.TIFв командной строке.