@echo off
setlocal
:: Start in this dir.
cd /d "%userprofile%\Downloads" || exit /b 1
:: Dir where 7z extracts to.
set "extractdir=unzip_tmp"
:: Zips move here if files or folders exist in cd.
set "faildir=unzip_fail"
rem Continue only if zip files exist.
if not exist *.zip (
echo No zip files
exit /b 0
)
for %%A in (*.zip) do (
set "fail="
rem Unzip with 7z.
echo Unzip: "%%~nxA"
7z x -o"%extractdir%" "%%~nxA" >nul
if not errorlevel 1 (
pushd "%extractdir%" && (
rem Check if files or folders exist in parent dir.
for /f "delims=" %%B in ('dir /b') do (
if exist "..\%%~B" (
echo Exist: "..\%%~B"
set "fail=defined"
)
)
rem Open PDF file.
for /r %%B in (*.pdf) do (
echo Open: "%%~nxB"
start "" /wait "%%~fB"
)
rem Move files or folders to parent dir.
if not defined fail for /f "delims=" %%B in ('dir /b') do (
echo Move: "%%~B"
move "%%~B" .. >nul
)
popd
)
rem Cleanup.
if defined fail (
if not exist "%faildir%" (
echo Create: "%faildir%"
md "%faildir%"
)
echo Remove: "%extractdir%"
rd "%extractdir%" /s /q
echo Move: "%%~nxA"
move "%%~nxA" "%faildir%" >nul
) else (
echo Remove: "%%~nxA"
del "%%~nxA" >nul
)
)
)
rem Final cleanup.
if exist "%extractdir%" (
echo Remove: "%extractdir%"
rd "%extractdir%" /s /q
)
Используется предустановленный каталог для распаковки zip-файлов.Переменная с именем extractdir
содержит имя папки для использования.Предустановленный каталог позволяет искать файлы PDF по изолированному пути.
Сценарий довольно устный, поэтому можно увидеть, что распаковано, перемещено и т. Д.
Операция с кодом:
- Изменить каталог на
Downloads
каталог. - Выйти, если нет zip-файлов.
- Найти zip-файл.
- Извлечь из zip-файла в
%extractdir%
. - Проверьте, существуют ли извлеченные файлы и папки в родительском каталоге.Если это так, задайте для
fail
значение. - Выполните рекурсивный поиск файлов PDF и откройте их.
- , если
fail
не определено, переместите файлы и папки в родительский каталог. - Очистите, удалив zip-файл или удалив
%extractdir%
и переместив zip-файл в %faildir%
, если определен сбой. - В конце удалите
%extractdir%
, если он существует, чтобы он не мог испортить следующий запуск.