PDA

Показать полную графическую версию : [решено] Переименование файла и напоминание юзеру


Serg2010
21-07-2009, 00:25
Доброго время суток! Подскажите плиз примером:

Пользователь должен ежедневно копировать (штатными средствами приложения) некую базу, в результате чего в папке C:\Backup образуется файл c именем BASE.ZIP
Требуется:
1. Чтобы не затереть файл очередной копией переименовывать его добавляя к имени дату и время ЕГО СОЗДАНИЯ. Не просто дату текущую, а создания - это более информативный вариант.
2. Организовать проверку не только присутствие этого файла вообще, но и проверку его актуальности по той же дате создания. Т.е. если предположим между датой создания и текущей промежуток более 24 часов (лучше наверное в часах - точнее) то бить тревогу и выдать пользователю сообщение (возможно виндовое) и даже может модальное что нужно выполнить копирование. И так напоминать ему каждые 15 минут. Если условие положительное - прекратить проверку. Таким образом осуществляется контроль за пользователем.
3. Если файл удовлетворяет всем условиям и переименован после этого - можно скопировать его в нужное место ...(или его один или настроить синхронизацию, если только это не замедлит процесс)

Фишка в том, что приложение старое и не имеет встроенных возможностей для копирования по расписанию и т.д. нужное тупое визуальное копирование штатными средствами - о чем пользователь иногда забывает :-) И довольно часто.

amel27
21-07-2009, 15:39
Serg2010

1-2. Где-то так? Для русской локализации (DD.MM.YYYY HH:MM). Скрипт запланировать на периодичность ~24ч, только в рабочее время, запускать просроченные задания и при обязательной регистрации пользователя - при отсутствии копии скрипт входит в цикл и шлет сообщения с периодом SLEEPS секунд (через NET SEND), в процессе копирования ожидает завершения бэкапа, по окончании - переименует файл.
@Echo Off

Set APPDIR=D:\Backup
Set APPZIP=BASE.ZIP
Set SLEEPS=900

:MsgBox
If Exist "%APPDIR%\%APPZIP%" GoTo :RenZIP
Net Send %ComputerName% Копирование базы не проводилось очень давно. Требуется срочно выполнить!
Ping -n %SLEEPS% 127.0.0.1 >Nul
GoTo :MsgBox
:RenZIP_Loop
Ping -n %SLEEPS% 127.0.0.1 >Nul
:RenZIP
For %%i In ("%APPDIR%\%APPZIP%") Do For /F "Tokens=1-5 Delims=-.:/ " %%a In ("%%~ti") Do Set $T=%%c%%b%%a%%d%%e"
For %%i In ("%APPDIR%\%APPZIP%") Do REN "%%i" "%%~ni_%$T%%%~xi"
If ErrorLevel 1 GoTo RenZIP_Loop
Exit /B
3. Может совместить с переименованием?

Serg2010
23-07-2009, 18:10
amel27, спасиб, само то!

Serg2010
11-08-2009, 20:26
Доброго времени суток!

Потестил батник. Вот какие есть наблюдения:

1. Открывавется батник в интерактивном окне, даже если и в свернутом виде в панели - его легко закрыть, тем самым прекратив работу, а это не входит в мои планы :-) если пользователь не создал архивную базу.
2. В связи с 1 пунктом решил сделать запуск батника не через штатный планировщик, а посредством команды AT. Процесс теперь не виден пользователю. Но работать батник как-то начинает не правильно. Он только выводит сообщение пользователю по send, но переименование файла не производит, да и не видит его вообще. Подкладываю нужный файл а ему пофиг. Чтот там нужно ещё если через AT делаю?
3. Нужно такое усовершенствоание батника: дело в том что писался он в расчете на запуск у одного пользователя, а ответственных на самом деле за копирование несколько. Следовательно, если у одного он отработает успешно, то других задолбает сообщениями :-) Значит нужно всёж скидывать как-то факт создания копии куда-то, чтобы остальные могли прочесть и прекратить свои батники тоже. Как это сделать лучше? Допускаю, что в корне сам батник может быть переделан ...

Nik_rus
11-08-2009, 21:50
Насчет скрытия - есть засечтательная утила hidcon (http://tools.oszone.net/Vadikan/temp/hidcon.exe)
Собсно, работает так же, как и cmd.exe, но окон не видно а весит всего 2 кб (!).
По вопросу мультиюзерности: может создавать спец. папки для каждого компа ? А в них копировать базу...

Насчет скрытия - есть замечательная утила hidcon (http://tools.oszone.net/Vadikan/temp/hidcon.exe)
Собственно, работает так же, как и cmd.exe, но окон не видно а весит всего 2 кб (!).
По вопросу мультиюзерности: может создавать спец. папки для каждого компа ? А в них копировать базу...

amel27
12-08-2009, 06:40
Serg2010

1. Статья: Скрытие консольных окон (http://www.oszone.net/6156).

2. AT планирует задание под SYSTEM, у этой учетки нет прав на сетевые ресурсы. В домене это решается простым включением учетки компа в списки доступа шары, в рабочей группе придется открывать доступ к шаре ВСЕМ, включая анонимов.

3. Это лишь шаблон батника, все случаи не учесть - вариантов много: терминал, домен, рабочая группа и т.д. НО скрипт должен быть один, для уведомления нескольких машин достаточно добавить для каждого пользователя "Net Send" с указанием его машины/имени, типа:
Net Send Computer1 Копирование базы не проводилось очень давно. Требуется срочно выполнить!
Net Send Computer2 Копирование базы не проводилось очень давно. Требуется срочно выполнить!
Net Send Computer3 Копирование базы не проводилось очень давно. Требуется срочно выполнить!

Serg2010
12-08-2009, 19:04
Доброго времни суток!

Спасибо за помощь!
А вот по поводу работы скриптов на разных машинах не понял. Зачем мне рассылать сообщения каждому. Я имел ввиду что пользоватлей базы и ответственных за копирование несколько человек и у каждого будет запускаться этот скрипт. Так вот если у одного скрипт обнаржит появление копии и сделает как задумано (переименование и т.д.), то у других то скрипт просто будет крутиться тогда уж до бесконечности. чего им копировать опять если уже всёс делано?. Ведь нужна просто копия базы и не важно кто её сделает. Главно сделать. Предполагаю что тут нужно скидывыаь какой-то флаг в файл и другие компы должны его читать. Как только там положительный ответ им тоже пора загругляься. Как то так.

amel27
13-08-2009, 01:50
вот по поводу работы скриптов на разных машинах не понял. »я тоже не понял, так как говорил об обратном - независимо от количества ответственных (машин/пользователей) скрипт должен быть ОДИН (если база ОДНА), причем логичней его запускать там, где хранятся сами архивы.

З.Ы. Синхронизация работы нескольких батников не так проста, как кажется - даже если их всего два, не говоря уже о большем количестве... Поэтому, сначала убедите, что в вашем случае это действительно необходимо.




© OSzone.net 2001-2012