Войти

Показать полную графическую версию : bat - сравнение названия папки с текущей датой


MisterCron
28-01-2021, 12:34
Добрый день! Имеется bat файл который запускается несколько раз в день. Скрипт копирует все файлы находящиеся в папке new в папку backup с текущей датой. При обнаружении в папке backup папку с текущей датой он ее удаляет, создает новую и копирует туда файлы из папки new. Суть в том что нужно сделать условие - чтобы при обнаружении папки с текущей удаление и копирование не происходило. Большое спасибо за помощь.


@echo off

md backup

set _my_datetime=%date%
set _my_datetime=%_my_datetime: =_%
set _my_datetime=%_my_datetime::=%
set _my_datetime=%_my_datetime:/=.%
set _my_datetime=%_my_datetime:,=.%

RD /S /Q "backup\%_my_datetime%"

xcopy new backup\%_my_datetime%\ /H /Y /C /R /S

alpap
28-01-2021, 13:37
@echo on
@for /f "tokens=1* delims==" %%a in ('"wmic path win32_localtime get Day,Month,Year,Hour,Minute,Second /value|find "^=""') do @set "%%a=0%%b"
:: if exist "%Year:~-5%.%Month:~-3%.%Day:~-3%-%Hour:~-3%'%Minute:~-3%'%Second:~-3%" echo Не удаляем, не копируем
if "Name_Dir"=="%Year:~-5%.%Month:~-3%.%Day:~-3%-%Hour:~-3%'%Minute:~-3%'%Second:~-3%" echo Не удаляем, не копируем
pause

запустите, посмотрите какой формат в коде и подгоните под свой формат в имени папки

megaloman
28-01-2021, 15:24
Как попросили (формат имени папки взял из Вашего примера): @Echo Off
cls
Set "From=New"
Set "To=backup"
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO Set "Now=%%d"

Set "Backup=%To%\%Now:~6,2%.%Now:~4,2%.%Now:~0,4%"
If Not Exist "%Backup%\" Xcopy "%From%\*.*" "%Backup%\" /H /Y /C /R /S /D
rem Xcopy "%From%\*.*" "%Backup%\" /H /Y /C /R /S /D
Pause
Exit /B

MisterCron, по моему скромному мнению, у Вас неверная постановка: считаю, что если папка есть, то надо туда скопировать только изменённые файлы, а вот удалять папку и всё копировать заново, или ничего не делать, если она уже есть - плохой путь.
Если Вы сочтете это приемлемым, то уберите If Not Exist "%Backup%\" и обязательно добавьте в Xcopy /D, как это сделано в закомментированной строке

MisterCron
28-01-2021, 18:54
у Вас неверная постановка »
Большое спасибо за Ваш ответ. Задача состоит в том чтобы сделать бекап один раз в день. Если бекап сделать не делать. И дату сравнивать исходя из _my_datetime. Каждый день будет создаваться 1 бэкап

MisterCron
28-01-2021, 22:00
Пришел к такому коду
if not exist "backup\%_my_datetime%" (
xcopy "new" "backup\%_my_datetime%\" /H /Y /C /R /S
) else (
echo #**The backup has already been created today**#
)




© OSzone.net 2001-2012