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

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

Serg2010 21-07-2009 00:25 1173204

Переименование файла и напоминание юзеру
 
Доброго время суток! Подскажите плиз примером:

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

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

amel27 21-07-2009 15:39 1173677

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 1175802

amel27, спасиб, само то!

Serg2010 11-08-2009 20:26 1191308

Доброго времени суток!

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

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

Nik_rus 11-08-2009 21:50 1191369

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

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

amel27 12-08-2009 06:40 1191619

Serg2010

1. Статья: Скрытие консольных окон.

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

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

Net Send Computer1 Копирование базы не проводилось очень давно. Требуется срочно выполнить!
Net Send Computer2 Копирование базы не проводилось очень давно. Требуется срочно выполнить!
Net Send Computer3 Копирование базы не проводилось очень давно. Требуется срочно выполнить!


Serg2010 12-08-2009 19:04 1192117

Доброго времни суток!

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

amel27 13-08-2009 01:50 1192402

Цитата:

Цитата Serg2010
вот по поводу работы скриптов на разных машинах не понял. »

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

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


Время: 06:06.

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