Попросили меня как-то спасти базу 1С с рабочего ноутбука. С 1С я не работал и не сильно горел желанием это делать, но очень уж попросили, поэтому согласился. Приехал, диагностировал посыпавшийся хард, решил вытащить базы и менять весь ноутбук, чтобы 1С ворочалась шустрее. А для того, чтоб не потерять базы, если хард и на новом ноутбуке начнёт умирать — решил сделать какую-нибудь систему бэкапов.
Ситуация такая: ноутбук в магазине, магазин на улице, по ночам не отапливается, по утрам включается холодным. Для начала предложил поставить SSD, но владельцы магазина сочли такой апгрейд слишком затратным, поэтому я решил делать копию баз на карту памяти SD. Дёшево, сердито, но работает.
Идея есть, осталась реализация. Хотел было искать какой-нибудь софт, который будет базы копировать, но потом вспомнил, что хотел на досуге поближе познакомиться с cmd, поэтому начал строить свой велосипед. Немного гугла, несколько толковых советов и получилось это:
echo off
set source=D:1cdb
set backup=K:backup1cdb
set logfile=backup.log
set ssize=0
set bsize=0if exist %backup%%date% (goto exist_backup)
if not exist %source% (goto nexist_sourcedir)
if not exist %backup% (goto nexist_backupdir)start cleaner.bat
echo Wait for creating of backup
mkdir %backup%%date%
xcopy %source% %backup%%date% /H /Y /C /R /S
for %%i in (%source%*) do (set /a ssize+=%%~zi)
for %%i in (%backup%%date%*) do (set /a bsize+=%%~zi)if %ssize% NEQ %bsize% goto copy_failed
echo %date% >> %logfile%
echo %time% >> %logfile%
echo Backup created successfully >> %logfile%
echo. >> %logfile%
goto eof:copy_failed
color 0c
set reason=Copy differs from the source
echo %reason%
pause
goto end:nexist_backupdir
color 0c
set reason=Backup directory is not ok
echo %reason%
pause
goto end:nexist_sourcedir
color 0c
set reason=Source directory is not ok
echo %reason%
pause
goto end:exist_backup
color 07
set reason=Looks like daily backup is existed
echo %reason%
pause:end
echo %date% >> %logfile%
echo %time% >> %logfile%
echo Backup not created >> %logfile%
echo Reason: %reason% >> %logfile%
echo. >> %logfile%
goto eof:eof
start 1c.exe
Содержание cleaner.bat:
echo off
set backup=K:backup1cdbforfiles /P %backup% /M * /D -5 /C «cmd /c rd /s /q PATH»
Работает очень просто — подсунул ссылку на этот скрипт, вместо бинарника 1C, сотрудникам магазина. Скрипт запускается, удаляет бэкапы, созданные более пяти дней назад, копирует базы на карту SD, а потом уже запускает 1С. Если что-то не так — ругается, и запускает 1С.
Сотрудникам магазина сделали инструкцию, мне вручили спасибо, и на этом разошлись. Скрипт работает без проблем, поэтому вручаю его вам и жду обильную критику.