Пакетный скрипт 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
в командной строке.