![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Переименование папки и копирование новой из сети. |
|
CMD/BAT - Переименование папки и копирование новой из сети.
|
Новый участник Сообщения: 5 |
Здравствуйте.
Мне поставили задачу, автоматизировать процесс обновления программы. Что бы Вы понимали, мне нужно почти каждый день, переименовать локальную и скопировать из сети новую папку (обновление) примерно на 30 компа. Если это делать в ручную, то работа занимает как минимум весь рабочий день и при этом нужно намотать примерно 18-20 км по территории огромного завода. Мне нужен бат файл, который будет выполнять следующее: 1. rename "C:\loc******\Factory" "Factory_(дата установки обновления такого формата 2017_06_17)" (Перед тем как копировать новую папку, нужно старую переименовать - добавить к ней дату. ) 2. После этого нужно скопировать из сети (папка будет на компе: 192.168.1.11\www\Factory новую папку Factory, в C:\loc******\) Создать папку с датой - научился, но вот переименовать, что то никак. ((( Помогите пожалуйста. |
|
Отправлено: 08:16, 17-06-2017 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать megaloman, я знаком с подобным подходом не понаслышке. Замечу токмо, что покупать надо не самокат, а фанеру, строить из неё ероплан и рулить оттель к едрене фене.
|
Отправлено: 12:30, 17-06-2017 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Lorttt, Я бы предложил это организовать так:
1. На общем ресурсе выкладывал бы не папку с изменениями, а упакованный файл папки с признаком задачи и даты-времени изменения. Например: buh201706131525.rar (естественно, архиватор используем разрешенный в инф. системе). Во первых, это сделает копирование по сети быстрее и, главное, позволит автоматизировать порядок обновлений - ИМХО, бывает, что обновления корректно становятся, если ни одно не пропущено и обязательно последовательно надо все обновления сделать. 2. Может быть, несколько раз в день организовать в назначенном задании на машинах пользователей копирование обновлений, еще не присутствующих у них. Хотя бы это руками не делать. По крайней мере, свести процесс к запуску скрипта. 3. Меня аж всего корёжит, как представлю, что 30 раз в день надо делать одно и то же, не знаю, что у Вас за обновление, но хотя бы сам процесс попытаться организовать скриптом. И заставить пользователя его делать. Например, задача не запустится, пока существует несделанное обновление. 4. А само обновление (лучше скриптом, чем руками) по следующему алгоритму: 4.1. Упакованные файлы обновления приходят, например, в папку Factory.In 4.2. Из папки Factory.In обновления последовательно распаковываются, например, в Factory, и устанавливаются. Factory очищается. 4.3. Установленные обновления из Factory.In последовательно по мере установки перемещаются в папку, например, Factory.arc При скачивании обновлений скрипт смотрит все выложенные файлы и проверяет, нет ли уже их среди ранее скачанных в Factory.In и Factory.arc В идеале, при запуске задачи (скриптом, естественно) проверяется обновление, ставится и уж затем запускается задача. Однако это возможно, если задача не крутится у пользователя круглосуточно, иначе надо думать как корректно принудительно перезапускать задачу. |
------- Последний раз редактировалось megaloman, 17-06-2017 в 13:26. Отправлено: 12:49, 17-06-2017 | #12 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Iska, Не всегда Едрена Феня доступна. Маленький городок, одно предприятие, работа за 3 копейки за счастье - на улице толпа голодных безработных. А уехать - семейные обстоятельства. Как-то на очень профессиональных курсах нечто подобное изложил преподавателю, как живётся айтишнику, он выдал запоминающуюся фразу: вы не на те курсы приехали, вам на курсы изменения менталитета.
|
------- Отправлено: 13:10, 17-06-2017 | #13 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать megaloman, Вы меня недооцениваете, коллега
![]() Цитата megaloman:
|
|
Отправлено: 13:25, 17-06-2017 | #14 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Цитата Lorttt:
И не надо беготни, мотороллеров, самокатов, ерапланов. |
|
------- Отправлено: 14:46, 17-06-2017 | #15 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Из ехе только склсервер и апач, который не копируются. Остальное в тхт. - которое надо копировать. |
|
Отправлено: 17:25, 17-06-2017 | #16 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Lorttt, в чём заключается процесс обновления, когда Вы его делаете руками?. Опишите процесс. Тогда можно не гадать, а попробовать что-то наваять для автоматизации. Надеюсь, это не составляет гостайны? Все равно, чем-то же задача запускается? Каким-нибудь браузером, например
|
------- Отправлено: 18:21, 17-06-2017 | #17 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Например, надо сделать так, что бы нужные записи удалялись. + Кнопку для этого сделать + еще что то там , которое зависит от этого процесса. Програмист получает задание. Изменяет/добавляет код в различные файлы тхт (которые в папке фэктори) . После чего, просто эту папку упаковывает в архив и дает мне. И.. я побежал. Пришел. переименовал локальную папку (если вдруг обновление кривое, то можно вернуться назад) и закинул новую. Все. Цитата megaloman:
ВОт поэтому я и прихожу. Пришел. Обновил. Почистил куки и вперед. |
||
Отправлено: 19:08, 17-06-2017 | #18 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата Lorttt:
Цитата Lorttt:
Цитата Lorttt:
подобная строка многое бы решила: |
|||
Последний раз редактировалось alpap, 18-06-2017 в 01:36. Отправлено: 01:30, 18-06-2017 | #19 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Lorttt,
Вот решение, способное автоматизировать процесс в рамках Вашей постановки задачи, пропишите свои пути на машине клиента
DirSoft = "Z:\loc\tra la la\Factory" 'Папка с софтом на локальной машине DirUpd = "\\192.168.1.11\www\Factory" 'Папка с обновлениями на сервере DirArc = DirSoft + "\Box_Arc" ' Папка с архивными копиями NDayCopy = 7 ' Сколько дней храним копии ErrTime = 60 ' Время (сек) отображения сообщения об ошибке перед завершением скрипта Browser = "C:\Program Files\Internet Explorer\iexplore.exe" ' Екзешник эксплорера ParamStart = "https://gomel.today/" ' Параметр запуска эксплорера с задачей NCancel = 1 ' Число напоминаний о завершении браузера. Затем он будет убит принудительно TCancel = 120 ' Время (сек) ожидания реакции на запрос Set FSO = CreateObject("Scripting.FileSystemObject") Set WShell = CreateObject("WScript.Shell") On Error Resume Next ' ========== Set FDirSoft = FSO.GetFolder(DirSoft) If Err.Number <> 0 Then LL = WShell.Popup(DirSoft + vbCrLf + vbCrLf + "Код ошибки " + CStr(Err.Number) + vbCrLf + Err.Description, ErrTime, "Ошибка открытия папки", 16) WScript.Quit End If Set FDirUpd = FSO.GetFolder(DirUpd) If Err.Number <> 0 Then LL = WShell.Popup(DirUpd + vbCrLf + vbCrLf + "Код ошибки " + CStr(Err.Number) + vbCrLf + Err.Description, ErrTime, "Ошибка открытия папки", 16) WScript.Quit End If Set FilesSoft = FDirSoft.Files Set FilesUpd = FDirUpd.Files If FilesUpd.Count = 0 Then WScript.Quit For Each FileNew In FilesUpd NameUpd = FileNew.Name MakeDir = True For Each FileOld In FilesSoft NameSoft = FileOld.Name If NameUpd = NameSoft Then MakeDir = (FileOld.DateLastModified <> FileNew.DateLastModified) If MakeDir Then Exit For End If Next If MakeDir Then Exit For Next On Error GoTo 0 If MakeDir Then Call Term(Browser, NCancel, TCancel) On Error Resume Next ' ========== ' Делаю папку для архива If Not FSO.FolderExists(DirArc) Then FSO.CreateFolder (DirArc) DirArcN = Now() DirArcN = DirArc + "\" + CStr(Year(DirArcN) * 10000 + Month(DirArcN) * 100 + Day(DirArcN)) + "_" + Mid(CStr(1000000 + Hour(DirArcN) * 10000 + Minute(DirArcN) * 100 + Second(DirArcN)), 2, 6) FSO.CreateFolder (DirArcN) ' Перемещаю имеющееся в архив If FilesSoft.Count > 0 Then LL = FSO.MoveFile(DirSoft + "\*.*", DirArcN) If Err.Number <> 0 Then LL = WShell.Popup("Обратитесь в техподдержку" + vbCrLf + vbCrLf + DirArcN + vbCrLf + "Код ошибки " + CStr(Err.Number) + vbCrLf + Err.Description, ErrTime, "Не создана копия задачи", 16) WScript.Quit End If End If ' Копирую обновления LL = FSO.CopyFolder(DirUpd, DirSoft) If Err.Number <> 0 Then LL = WShell.Popup("Обратитесь в техподдержку" + vbCrLf + vbCrLf + DirSoft + vbCrLf + "Код ошибки " + CStr(Err.Number) + vbCrLf + Err.Description, ErrTime, "Обновление не проделано", 16) WScript.Quit End If ' Удалю очень старые копии Set FDirArc = FSO.GetFolder(DirArc) Set FoldArc = FDirArc.SubFolders For Each Fold In FoldArc If DateDiff("d", Fold.DateCreated, Now()) > NDayCopy Then FSO.DeleteFolder (DirArc + "\" + Fold.Name) End If Next WShell.Run """" + Browser + """ " + ParamStart, 1, False On Error GoTo 0 End If Sub Term(Browser, NCancel, TCancel) Set FSO = CreateObject("Scripting.FileSystemObject") Set WShell = CreateObject("WScript.Shell") MsgTxt = "" MsgTxt = MsgTxt + "Программное обеспечение нуждается в обновлении." + vbCrLf MsgTxt = MsgTxt + "Закройте все окна с браузером. Нажмите ""OK""" + vbCrLf + vbCrLf MsgTxt = MsgTxt + "В противном случае программное обеспечение" + vbCrLf MsgTxt = MsgTxt + "будет завершено принудительно" + vbCrLf MsgTxt = MsgTxt + "с риском потери результатов Вашей работы" + vbCrLf For i = 1 To NCancel LL = WShell.Popup(MsgTxt, TCancel, "Внимание! ПО должно обновиться", 49) If LL = 2 Then WScript.Quit Next Proc = FSO.GetFileName(Browser) Set WMI = GetObject("winMgmts:") SQuery = "Select *From Win32_Process Where Name=" + """" + Proc + """" Set Processes = WMI.ExecQuery(SQuery) If Processes.Count = 0 Then Exit Sub On Error Resume Next For Each Process In Processes Process.Terminate Next On Error GoTo 0 End Sub ![]() Как это работает: Сохраните скрипт в файл с расширением .vbs на клиентской машине в кодировке Windows 1251. 1. При запуске скрипта на клиентской машине вручную: 1.1. Сравниваются файлы на сервере и на клиентской машине. Если все даты изменения файлов на сервере и у клиента совпадают и все файлы у клиента присутствуют, то не делаем ничего. 1.2. В противном случае: 1.2.1. Если у клиента запущен браузер, из-под которого работает задача, выдаётся запрос о том, что его работу надо завершить. Пользователю даётся на это время. Если пользователь не реагирует, браузер завершится принудительно. Точнее, закроются все окна и все экземпляры браузера, даже если он используется для других целей. У пользователя остаётся возможность отказаться от обновления в отведённое на реагирование время. 1.2.2. При отсутствии запущенного браузера все файлы задачи перемещаются в архивную папку. Я бы предложил, например, такую иерархию: Z:\loc\tra la la\Factory\Box_Arc\20170619_115818 Z:\loc\tra la la\Factory\Box_Arc\20170619_164201 В любом случае, считаю необходимым иметь отдельную выделенную папку для архивов. Не обязательно в Factory. 1.2.3. Копируются все файлы с сервера в папку задачи. 1.2.4. Просматривается архивная папка. Папки-архивы старше указанного количества дней, удаляются. Именно поэтому требуется для папок-архивов отдельная папка, чтобы не удалить лишнего. А если их не удалять, то получим в конце концов их громадное количество. 1.2.5. Запускается браузер. В параметре адрес задачи. Пропишите правильный. 2. Вариант, который оставит Вас без работы и грозит увольнением (Вы целый день этим вручную занимаетесь, теперь это будет делаться без Вас ![]() Поставьте этот скрипт в запланированные задания в планировщике у клиента, чтобы он работал ежедневно несколько раз в день. Он сработает точно так же, как вручную. Единственное, зачем Вы нужны, выложить обновление на сервер. При отсутствии обновления пользователь работу скрипта не заметит. При обновлении пользователь в состоянии адекватно ответить. |
------- Последний раз редактировалось megaloman, 19-06-2017 в 19:18. Отправлено: 18:56, 19-06-2017 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Копирование файла и переименование согласно списка из exel | TPOJIb_55 | Скриптовые языки администрирования Windows | 4 | 01-06-2016 09:28 | |
[решено] копирование файлов из нерасшаренной папки | kupall | Хочу все знать | 6 | 18-06-2015 13:18 | |
CMD/BAT - Копирование файлов из подкаталогов и их переименование в название папки | lexxxyatina | Скриптовые языки администрирования Windows | 7 | 13-11-2014 09:44 | |
PowerShell - Копирование отдельных файлов из папки в PS | Евгений_Никулин@vk | Скриптовые языки администрирования Windows | 2 | 10-02-2014 17:07 | |
VBS/WSH/JS - [решено] переименование и копирование папки | Anufriev | Скриптовые языки администрирования Windows | 6 | 22-05-2012 08:11 |
|