for /d %%r in (*) do for %%s in ("%%r\*.zip") do echo ---unzip %%s using output folder %%~dps
Я полагаю zip1 файл из примера zip1.zip и что там может быть больше архивных файлов в каждой вложенной , Но если нет, это будет работать и для одного zip-файла. И есть альтернатива внизу скрипта для zip-файлов без .zip
Эти файлы я использовал для теста. В «подпапке» есть намеренное место, потому что всегда полезно тестировать Batch-скрипт на пути с пробелами.
C:\temp\folder\sub folder1\zip1.zip
C:\temp\folder\sub folder1\zip1b.zip
C:\temp\folder\subfolder2\zip2.zip
C:\temp\folder\subfolder2\zip2b.zip
C:\temp\folder\subfolder3\zip3.zip
C:\temp\folder\subfolder3\zip3b.zip
C:\temp\folder\subfolder4\zip4.zip
C:\temp\folder\subfolder4\zip4b.zip
unzip не является командой Windows. Он может исходить из многих источников, поэтому формат его параметров может отличаться. В моем примере я использую 7zip.
В любом случае вам, вероятно, нужно будет указать выходной каталог с помощью любой утилиты unzip (или компакт-диска). В моем примере показано, как получить свое имя. В конце есть косая черта, что отлично с 7z, но может быть проблемой с другой утилитой. Из этого можно избавиться, но для этого потребуется больше кода.
Вы попросили извлечь все почтовые файлы в свой собственный каталог. Но если два zip-файла содержат файлы с тем же именем, они будут перезаписывать друг друга, поэтому было бы более желательно извлечь каждый почтовый индекс в свою собственную папку с тем же именем, что и zip-файл. Для этого папка должна быть создана, и весь сценарий заслуживает более одной строки.
Существует недоверие к для/д
Вот почему я включил для/ф версии, которая использовать реж команды
В случае, если вы хотите использовать эту команду более рекурсивно, с глубже пути, как: folder\subfolder3\more\paths\zip1.zip
, это возможно. Просто используйте for /f
из моего примера ниже и добавьте /s
в команду dir
: 'dir *.* /s /ad /b'
.
Эта команда должна делать то, что вы просили:
for /d %%r in (*) do for %%s in ("%%r\*.zip") do 7z x -y "%%s" -o"%%~dps"
и здесь весь тест-случай сценарий:
@echo off
echo ******
echo List all zip files using for /f
echo ******
for /f "tokens=*" %%r in ('dir *.* /ad /b') do for %%s in ("%%r\*.zip") do echo ---unzip %%s using output folder %%~dps
echo.
echo ******
echo List all zip files using for /d
echo ******
for /d %%r in (*) do for %%s in ("%%r\*.zip") do echo ---unzip %%s using output folder %%~dps
echo.
echo 1: extract to folders containing zip files - possible overwrites
echo 2: extract each zip to a folder named by the name of the zip file
choice /c 12
if not errorlevel 2 (
for /d %%r in (*) do for %%s in ("%%r\*.zip") do 7z x -y "%%s" -o"%%~dps"
) else (
rem ------ this is the alternative to extract each zip to its own folder
for /d %%r in (*) do for %%s in ("%%r\*.zip") do (
echo.
echo ******
echo *** Unzipping: %%s to folder: %%~dpns
mkdir "%%~dpns"
7z x -y "%%s" -o"%%~dpns"
)
rem ------
)
pause
exit /b
In case zip files does not have .zip extension:
for /d %%r in (*) do for %%s in ("%%r\*.*") do (
echo.
echo ******
echo *** Unzipping: %%s to folder: %%~dpns-unzipped
mkdir "%%~dpns-unzipped"
7z x -y "%%s" -o"%%~dpns-unzipped"
)
'unzip' не является стандартной командой окна. Откуда он? – npocmaka
'(* /% RR)' не может работать. Подстановочный шаблон в пути не поддерживается командным интерпретатором Windows. Отсутствует второй знак процента, который, очевидно, является типичной ошибкой, так как существует два 'R' вместо двух'% '. И разделитель каталога в Windows является символом обратной косой черты, а не символом косой черты. Так много ошибок в такой короткой строке. Вы когда-либо выполняли в окне командной строки 'for /?' И читали выходную справку для этой команды? – Mofi
nice Я не знал о том, что помог команде спасибо, я отредактировал исходный ответ с этой командой, чтобы улучшить вопрос, но я вставил все, что я пробовал последним в пакетном файле, играя с командами. – Snickdx