Ответ 1
Прочитать отличную тему Как сжать (zip) и распаковать (распаковать) файлы и папки с помощью пакетного файла без использования каких-либо внешних инструментов?, написанный npocmaka.
Я предлагаю использовать второе решение: Использование Shell.Application
Задачу можно выполнить с помощью zipjs.bat, также написанного npocmaka с командным файлом всего несколькими строками:
@echo off
for %%I in (*.zip) do call "%~dp0zipjs.bat" unzip -source "%%~fI" -destination "%%~dpnI\" -force yes
for /F "delims=" %%D in ('dir /AD /B "%TEMP%\*.zip" 2^>nul') do (
%SystemRoot%\System32\attrib.exe -h "%TEMP%\%%~D"
rd /S /Q "%TEMP%\%%~D" 2>nul
)
Гибкий командный файл zipjs.bat
должен находиться в той же папке, что и командный файл с двумя строками выше.
Запуск в окне командной строки call /?
объясняет %~dp0
, что означает диск и путь аргумента 0 командного файла без окружающих кавычек, заканчивающихся всегда обратным слэшем. Аргумент 0 вызываемого командного файла - это имя командного файла, см. Также Что означает% ~ dp0 и как оно работает?
Справка команды для, отображаемая при запуске в окне командной строки for /?
, объясняет
-
%%~fI
- полное имя файла/папки без окружающих кавычек и -
%%~dpnI
- диск, путь и имя файла/папки без окружающих кавычек и без расширения
для переменных цикла, таких как call /?
, для параметров/аргументов партии.
Второй цикл для находит все подкаталоги в каталоге для временных файлов с .zip
в имени каталога, удаляет скрытый атрибут и удаляет эти подкаталоги. Это необходимо, поскольку zipjs.bat
сначала извлекает каждый файл во вновь созданный подкаталог в каталоге для временных файлов и оставляет их там после успешного извлечения.