@Iron_Harvest

Как создать правильный бат-файл для архивации с условиями?

Мне нужно создать архив с помощью первого бат-файла и чтобы оставались только 5 последних архивов, а остальные удалялись. А вторым бат-файлом нужно последний созданный архив разархивировать в указанную директорию.
Первый бат архив написал, но не работает удаление старых, и соответственно не получается сделать такой же алгоритм для разархивации крайнего архива. Так же что бы проверить работоспособность нужно создать файл в блокноте DB_Updat.txt и записать туда полный путь до файла который будете архивировать.
chcp 1251
SET Arc=5

rem Изменить на свой каталог

set OutDir=C:\Users\user\Desktop\mmm
if not exist "%OutDir%" md "%OutDir%"
set h=%time:~0,2%
set h=%h: =0%
set FullBackupDir=%OutDir%\%date%_%h%%time:~3,2%%time:~6,2%\
md %FullBackupDir%
set ArcName=%FullBackupDir%\BD_Update_%date%.zip
set DB_Update=@C:\Users\user\Desktop\DB_Updat.txt
start /wait WinRAR a -y -m5 -ep -dh %ArcName% %DB_Update%

SET Index=0

rem Не удаляет старые архивы....

for /f "tokens=* delims=" %%D in ('dir %OutDir% /ad /b /o-d') do (
	if not %%D=="" (
		if not Arc==0 (
			set /a Arc-=1
		) else (


И вот второй батник, чтобы извлечь последний созданный архив, но должным образом не работает, только выводит как "текст" название последнего созданного каталога с архивом.
chcp 1251
set InDir=C:\Users\user\Desktop\mmm
set OutDir=C:\Users\user\Desktop\mmm!!!
for /f "delims=" %%d in ('dir /b/s/a-d/od "%InDir%\*.*"') do set "$d=%%~nxd %%~td"
start /wait WinRAR e -y  %$d% %OutDir%
  • Вопрос задан
  • 2238 просмотров
Решения вопроса 1
@Olgeir
1. Как удалить все файлы кроме 5 последних
for /f "skip=5" %%a in ('dir /a-d /b /s /od ....') do del %%a

2. for /f %%a in ('dir /a-d /b /s /od ....') do call asdf %%~nxd

:asdf
set p=%~1
start /wait WinRAR e -y %p% %OutDir%

goto :eof
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Jump
@Jump Куратор тега Резервное копирование
Системный администратор со стажем.
Лень вникать и пробовать....
Навскидку-
RMDIR удаляет каталоги. Нельзя удалить каталог, если в нем есть файлы.
Поэтому если не удаляет - значит каталог не пустой.
rd /s
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы