Показать полную графическую версию : Как правильно сделать батник?
blazer-05
23-10-2019, 19:43
Здравствуйте.
Есть батник с такой задачей
"D:\Program Files (x86)\WinRAR\WinRAR.exe" a -r -agYYYY-mm-dd_hh-mm-ss -u -rr8 -y H:\1c_backup\backup-.rar H:\1C_BASES\safonova\*.*
copy H:\1c_backup\*.rar \\192.168.1.67\backup\
он архивирует базу данных 1с и ложит ее рядом в каталог 1c_backup и отправляет копию на сосднюю машину.
Сейчас все копии копируются на соседнюю машину *.rar, как сделать, чтобы только последний архив копировался?
Архив имеет такой вид backup-2019-10-23_19-36-22.rar
megaloman
23-10-2019, 20:19
blazer-05, Если на сервере и на соседней машине должен быть одинаковый набор копий, то будет копироваться только отсутствующие или более свежие файлы
copy xcopy /D /Y H:\1c_backup\*.rar \\192.168.1.67\backup\Как вариант, вместо Copy, чтобы копировался только последний файл FOR /F "usebackq delims=" %%f IN (`2^>nul Dir /B /A:-D /O:D "H:\1c_backup\*.rar"`) DO Set "File=%%f"
xcopy /D /Y "H:\1c_backup\%File%" "\\192.168.1.67\backup\"
blazer-05
24-10-2019, 14:30
Все получилось, работает как нужно, спасибо огромное!
Подскажите еще пожалуйста, я сделал для другой машины аналогичный батник, который отправляет архив на фтп сервер с таким кодом.
"C:\Program Files (x86)\WinRAR\WinRAR.exe" a -r -agYYYY-mm-dd_hh-mm-ss -u -rr8 -y D:\backup\backup-.rar D:\1C_BASES\safonova\*.*
@echo off
ftp -s:D:\ftp.txt -nd
и файл ftp.txt где указаны параметры доступа на фтп сервер
open ip севера
user blazer-05
mypassword
binary
quote PASV
send D:\backup\backup-2019-10-23_16-03-15.rar
quit
все работает нормально, но как сюда передать этот последний созданный архив, чтобы на фтп тоже отправлялся этот же последний созданный архив?
сейчас отправляется только если явно указать ему имя файла backup-2019-10-23_16-03-15.rar
megaloman
24-10-2019, 16:51
blazer-05, Не проверял досконально:@Echo Off
Set "BoxArc=D:\backup"
Set "Mask=backup-20*.rar"
Set "FileIn=D:\1C_BASES\safonova\*.*"
Set "Fftp=D:\ftp.txt"
"C:\Program Files (x86)\WinRAR\WinRAR.exe" a -r -agYYYY-mm-dd_hh-mm-ss -u -rr8 -y %BoxArc%\backup-.rar "%FileIn%"
FOR /F "usebackq delims=" %%f IN (`2^>nul Dir /B /A:-D /O:D "%BoxArc%\%Mask%"`) DO Set "File=%BoxArc%\%%f"
>%Fftp% (
Echo open ip севера
Echo user blazer-05
Echo mypassword
Echo binary
Echo quote PASV
Echo send %File%
Echo quit
)
ftp -s:%Fftp% -nd
Exit /B 0
blazer-05
24-10-2019, 17:16
Похоже, что эта строка лишняя
"C:\Program Files (x86)\WinRAR\WinRAR.exe" a -r -agYYYY-mm-dd_hh-mm-ss -u -rr8 -y %BoxArc%\backup-.rar "%FileIn%"
т.к. он еще повторно создает один архив.
Я правильно понимаю, что теперь файл ftp.txt не нужен т.к. все настройки фтп сервера в одном батнике?
megaloman
24-10-2019, 17:48
Похоже, что эта строка лишняянет. Он вместо Вашей старой строки. Отличие- пути файлов задаются переменными. Если захотите перенести батник на другую машину или настроить для других путей - измените их в начале батника, а не в строке с архиватором.Я правильно понимаю, что теперь файл ftp.txt не нужен не совсем. Этот файл делает батник каждый раз при работе, а потом на него он же ссылается. Руками этот файл делать не надо, батник его всё равно перепишет. Надо в батнике его правильно написать (пароли, явки и т д). %File% - не трогать, это имя последнего файла.
После работы батника можете его ручками открыть и посмотреть, что там внутри.
Кстати, его можно, в принципе, в батнике же и убить после отработки ftp.
Del "%Fftp%"
blazer-05
24-10-2019, 18:10
насчет фтп понятно.
По поводу той строки, тогда почему он делает два архива т.е. подряд сразу два. Когда ее закомментировал, то все нормально отрабатывает один раз.
megaloman
24-10-2019, 18:15
почему он делает два архива т.е. подряд сразу дваВы неправильно интерпретируете ситуацию:
Ваша строка делает один архив с одним именем, моя строка делает другой с другим именем - в именах архива Вы задействовали секунды, соответственно, и архивы различаются по времени в именах. Надо оставить одну строку с архивированием, имхо, лучше мою, дважды делать архив с разницей в малое время не стОит.
blazer-05
24-10-2019, 18:25
Вы неправильно интерпретируете ситуацию:
Ваша строка делает один архив с одним именем, моя строка делает другой с другим именем - в именах архива Вы задействовали секунды, соответственно, и архивы различаются по времени в именах »
в принципе я понял. Сначала делается архив из моей строки, потом из вашей, где переменными изменяется время и потом этот архив уходит уже на соседний комп по сети и на внешний фтп.
Но все же, когда я закоментировал вашу строку данный скрипт работал нормально в каждом архиве имя его было разным т.е. время отличалось и так же все отправлялось во всех направлениях.
Спасибо вам огромное за помощь!
megaloman
24-10-2019, 18:29
blazer-05, если Вы сегодня запустите сто раз батник, сто раз создадутся архивыс разным временем в имени, сто раз отправятся на фтп, и не важно, чья строка с архиаатором останется - всегда будет отправляться последний сделанный файл.
Если в одном батнике два раза последовательно делается архив, отправится последний по времени.
blazer-05
24-10-2019, 18:56
megaloman, спасибо я понял.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.