Войти

Показать полную графическую версию : Копирование файла каждые восемь часов


v79italya
13-10-2022, 07:16
Здравствуйте
Возможно ли с помощью bat делать каждые 8 часов копию файла xlsx в папку? При этом удалять в папке файлы, созданные более месяца назад. Для удобства добавлять к имени файла время и дату.
Я так понимаю нужен bat и планировщик(для запуска bat каждые 8 часов) в Windows.
Или возможно такое только с помощью bat. т.е. скопировал bat на нужный комп, прописал имя копируемого файла и имя папки, в которую копировать. И все работало бы)

dmitryst
13-10-2022, 08:50
v79italya, планировщик нужен, чтобы запускать ваш батник по расписанию. Сам батник должен содержать только функции копирования (robocopy, например) и поиска/удаления старых файлов. Пример копирования на сетевой диск
@echo off

rem USE FULL PATH TO NETWORK DRIVE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

net use x: \\192.168.1.2\windows pascword@ /user:backupuser
set "folder=\\192.168.1.2\windows\backup\SQL_back"
set "source=d:\backup_sql"
set "mask=*.*"

rem с датой и временем
rem robocopy "%source%" "%folder%\%date%\%time:~,2%.%time:~3,2%" "%mask%">nul
rem только дата, без времени
robocopy "%source%" "%folder%\%date%" "%mask%">nul

net use x: /delete

del /Q "d:\backup_SQL\*.*"

exit /b
У меня выполняется копирование в одну папку, добавляется дата (и время) и после завершения копирования на сетевой диск удаляются все файлы в папке. Вам надо будет воспользоваться функцией ForFiles /p “C:\path\to\folder” /s /d -30 /c “cmd /c del /q @file”. Замените 30 на нужное количество дней, более старые файлы будут удаляться.

v79italya
13-10-2022, 09:11
dmitryst, спасибо!
Попробую воспользоваться.
А нет варианта как выглядит код не с сетевым диском, а с папкой и файлом xlsx

dmitryst
13-10-2022, 10:04
@echo off


set "dest=d:\kopiruem_suda"
set "source=d:\backup_sql"
set "mask=*.xlsx"

rem с датой и временем
robocopy "%source%" "%dest%\%date%-%time:~,2%.%time:~3,2%" "%mask%">nul

exit /b

Как-то так... Более знающие коллеги поправят, если не так ;)
ПС. копируется в папку с датой и временем, как добавить к названию файла - не знаю, коллеги подскажут. Для одного-единственного файла можно написать как-то так
echo f|XCOPY D:\BACKUP\base.xlsx E:\BACKUP\%Date:~6,4%.%Date:~3,2%.%Date:~0,2%_base.xlsx /Y

v79italya
13-10-2022, 12:46
dmitryst, спасибо!
Также нашел сегодня прогу Cobian Backup . Установилась правда с ошибками. Гоняю пока

megaloman
13-10-2022, 15:19
v79italya, @Echo Off
>nul Chcp 1251
Set "FileIn=Z:\Soft_In\делать каждые 8 часов копию файла.xlsx"
Set /A Narc=90

Set "BoxOut=Z:\Soft_Arc"
rem Set "BoxOut=\\ServerName\Test2"
rem Set "BoxOut=\\192.168.100.23\Test1"

If Not Exist "%FileIn%" (Echo File "%FileIn%" not found &Pause &Exit /B 2)
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "@Tdate=%%d" &Call Set "@Tdate=%%@TDate:~0,12%%"
For %%f In ("%FileIn%") Do Set "Ext=%%~xf" &>nul Copy %%f "%BoxOut%\%@Tdate% %%~nxf"

FOR /F "usebackq Skip=%Narc% delims=" %%f IN (`2^>nul Dir "%BoxOut%\20?????????? *%Ext%" /A:-D /B /O:-N`) DO Del "%BoxOut%\%%f"
Exit /B
При наличии кириллицы в путях сохранить скрипт в кодировке 1251
Укажите свой путь к исходному файлу. Он может быть сетевым.
Укажите свою папку, куда складываете копии. Она тоже может быть сетевой. Для примера оставил закомментированные строки.
Я не хочу в CMD возиться с датами - возможно, но громоздко.
Поэтому, если Вы делаеие копии каждые 8 час=3 копии в сутки = 90 копии в месяц, то я предлагаю сохранять последние 90 копии. Вы можете указать иное число.
Естественно, Вы будете осчастливлены, если этот скрипт будет выполняться планировщиком.

v79italya
14-10-2022, 08:32
megaloman, спасибо! Сохраняет файл при клике. Осталось Планировщик настроить




© OSzone.net 2001-2012