Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   bat - сравнение названия папки с текущей датой (http://forum.oszone.net/showthread.php?t=347782)

MisterCron 28-01-2021 12:34 2947808

bat - сравнение названия папки с текущей датой
 
Добрый день! Имеется 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 2947815

Код:

@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 2947821

Как попросили (формат имени папки взял из Вашего примера):
Код:

@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 2947838

Цитата:

Цитата megaloman
у Вас неверная постановка »

Большое спасибо за Ваш ответ. Задача состоит в том чтобы сделать бекап один раз в день. Если бекап сделать не делать. И дату сравнивать исходя из _my_datetime. Каждый день будет создаваться 1 бэкап

MisterCron 28-01-2021 22:00 2947857

Пришел к такому коду
Код:

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**#
)



Время: 23:39.

Время: 23:39.
© OSzone.net 2001-