Я исправил ответ: батник правильно отработает со всеми папками, в том числе и вложенными. Кроме того, я посчитал, что перед удалением исходного надёжнее проверить наличие Zip-файла. Ваш рецепт убрать ключ /s не универсален.
Но, кроме того, в Вашей постановке кроется один "ухаб" - зачем упаковывать уже упакованный файл при повторном запуске батника. Вот вариант решения:
Код:
![Выделить весь код](images/misc/selectcode.png)
@Echo Off
FOR /F "usebackq delims=" %%j IN (`Dir /s /b /A:D`) DO Call :SubDir "%%j"
GoTo :Eof
:SubDir
FOR /F "usebackq delims=" %%i IN (`Dir %1 /b /A:-D`) DO (
If /I Not %%~xi==.zip (
7z a -tzip "%~1\%%i.zip" "%~1\%%i"
If Exist "%~1\%%i.zip" del "%~1\%%i"
)
)
То есть при повторном запуске упакуем только неупакованные файлы в папках, если они появятся