Войти

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


Lorttt
17-06-2017, 08:16
Здравствуйте.
Мне поставили задачу, автоматизировать процесс обновления программы.
Что бы Вы понимали, мне нужно почти каждый день, переименовать локальную и скопировать из сети новую папку (обновление) примерно на 30 компа. Если это делать в ручную, то работа занимает как минимум весь рабочий день и при этом нужно намотать примерно 18-20 км по территории огромного завода.

Мне нужен бат файл, который будет выполнять следующее:

1. rename "C:\loc******\Factory" "Factory_(дата установки обновления такого формата 2017_06_17)" (Перед тем как копировать новую папку, нужно старую переименовать - добавить к ней дату. )
2. После этого нужно скопировать из сети (папка будет на компе: 192.168.1.11\www\Factory новую папку Factory, в C:\loc******\)

Создать папку с датой - научился, но вот переименовать, что то никак. (((
Помогите пожалуйста.

Iska
17-06-2017, 09:32
Вы ничего не сказали о Вашей сети и об организации машин в ней.

и при этом нужно намотать примерно 18-20 км по территории огромного завода. »
Зачем наматывать?

Что скрывается под выделенным?
"C:\loc******\Factory" »
Что делать, если таких папок окажется несколько?

папка будет на компе: 192.168.1.11\www\Factory »
Машина имеет имя? Почему обращение идёт по ip-адресу вместо имени?

Busla
17-06-2017, 09:46
что значитно вот переименовать, что то никак »что вы делаете, и что выдаёт компьютер?

Зачем наматывать? »
Человеку дали отличный стимул для постижения азов программирования - аплодирую руководству стоя!

Lorttt
17-06-2017, 09:54
Вы ничего не сказали о Вашей сети и об организации машин в ней. »

Доменная внутренняя сеть.

Что скрывается под выделенным? »

Там длинный путь из несколько папок.

Машина имеет имя? Почему обращение идёт по ip-адресу вместо имени? »

У нас сотни машин, и все спрятано, а по этому айпи - есть папка с полным доступом для всех. Я бы туда закидывал папку с обновой, и все пользователи , после моего телефонного звонка просто будут запускать батфайл.

что вы делаете, и что выдаёт компьютер? »
Я имел ввиду, что поиск гугла не помог найти мне , как правильно переименовать, что бы дописать к папке дату.

Iska
17-06-2017, 10:52
Человеку дали отличный стимул для постижения азов программирования - аплодирую руководству стоя! »
Не вижу стимула.

Я не могу понять — зачем вообще куда-то ходить? Есть десятки способов удалённого управления, была бы физическая связь между машинами.

Там длинный путь из несколько папок. »
Путь постоянный и идентичный на всех машинах?

У нас сотни машин, и все спрятано, а по этому айпи - есть папка с полным доступом для всех. Я бы туда закидывал папку с обновой, и все пользователи , после моего телефонного звонка просто будут запускать батфайл. »
Как должно быть:

машина с разделённым ресурсом, доступном всем машинам домена, ресурс может быть для них — только для чтения, для Вас — и на запись;
на этом ресурсе Вы периодически выкладываете обновлённое содержимое;
на всех потребных машинах групповой политикой при старте машины запускается пакетный файл/скрипт WSH или PowerShell, который по некоему признаку проверяет наличие новой версии на этом разделённом ресурсе — например, по версии основного исполняемого файла, буде таковой;
если версия на разделённом ресурсе более новая, нежели на машине, где этот скрипт исполняется — последний производит копирование нового содержимого с разделённого ресурса на локальную машину и завершает свою работу.

И никаких хождений, звонков, «закройте программу — нам надо обновить» и т.п.

А самый правильный вариант — использовать msi и те же групповые политики. Но я за это даже не заикаюсь уже.

Lorttt
17-06-2017, 11:55
Я не могу понять — зачем вообще куда-то ходить? Есть десятки способов удалённого управления, была бы физическая связь между машинами. »
Я не могу сказать где работаю, но за посторонние проги, типа рАдмина и так далее - сразу с работы увольняют. Нельзя.
По этому, сотрудник должен лично прийти и установить.

Путь постоянный и идентичный на всех машинах? »
Да.
если версия на разделённом ресурсе более новая, нежели на машине, где этот скрипт исполняется — последний производит копирование нового содержимого с разделённого ресурса на локальную машину и завершает свою работу. »

Проблема в том, что программист что-то где то в коде изменяет и дает потом целую папку. Версионность непонятно как определять.

alpap
17-06-2017, 12:03
Lorttt,
мы в 21 веке живем - выбейте себе мотороллер :yahoo:

megaloman
17-06-2017, 12:12
Lorttt, @Echo Off

Set "BoxRoot=C:\loc"
Set "BoxEnd=Factory"
Set "BoxFrom=\\192.168.1.11\www\Factory"

Set "DtTime=%Date:~6,4%_%Date:~3,2%_%Date:~0,2%_%Time::=%"

FOR /F "usebackq delims=" %%d IN (`Dir "%BoxRoot%\%BoxEnd%" /S /B /A:D`) DO Set "BoxIn=%%d" &Set "BoxOut=%%d-%DtTime%"

move /Y "%BoxIn%" "%BoxOut%" >nul
md "%BoxIn%" >nul
xcopy /E "%BoxFrom%\*.*" "%BoxIn%\" 1>nul

Iska
17-06-2017, 12:15
Я не могу сказать где работаю »
Этого не требуется, товарищ майор ;).

но за посторонние проги, типа рАдмина и так далее - сразу с работы увольняют. Нельзя. »
Всё укладывается в рамки программного обеспечения, входящего в комплект поставки ОС.

По этому, сотрудник должен лично прийти и установить. »
Какой в этом смысл? Не понимаю.

программист что-то где то в коде изменяет и дает потом целую папку. Версионность непонятно как определять. »
1. Спросить у программиста, меняет ли он при этом, в ручном режиме или автомтически при сборке, номер версии исполняемого файла.
2. Проверить самому.

А ходить по машинам и копировать ручками (или управлять ручным запуском пакетного файла по телефону) — тут сразу вспоминается «Да что же мы, дикари?! В XVIII веке живём!» :(.

Update: пока писал — вон уже и коллега alpap явно вспомнил тот же эпизод ;).

megaloman
17-06-2017, 12:23
Iska, Иной раз статус айтишника в организации между уборщицей и секретаршей - секретарша главнее, так что, alpap, мотороллер ему не светит - по рангу не положен. На свои деньги купить самокат и, если удастся с ним просочиться через проходную, то вперёд и с песнями

Iska
17-06-2017, 12:30
megaloman, я знаком с подобным подходом не понаслышке. Замечу токмо, что покупать надо не самокат, а фанеру, строить из неё ероплан и рулить оттель к едрене фене.

megaloman
17-06-2017, 12:49
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:10
Iska, Не всегда Едрена Феня доступна. Маленький городок, одно предприятие, работа за 3 копейки за счастье - на улице толпа голодных безработных. А уехать - семейные обстоятельства. Как-то на очень профессиональных курсах нечто подобное изложил преподавателю, как живётся айтишнику, он выдал запоминающуюся фразу: вы не на те курсы приехали, вам на курсы изменения менталитета.

Iska
17-06-2017, 13:25
megaloman, Вы меня недооцениваете, коллега ;). Я именно так и живу. Только округлите «маленький городок» в ещё меньшую сторону.

он выдал запоминающуюся фразу: вы не на те курсы приехали, вам на курсы изменения менталитета. »
Менталитет тут, как правило, не при чём.

megaloman
17-06-2017, 14:46
Проблема в том, что программист что-то где то в коде изменяет и дает потом целую папку. Версионность непонятно как определять. » А в чём заключается процесс обновления? Папку обновления просто переписать в папку с исполняемым кодом? Тогда вообще всё просто. Зачем что-то куда-то переименовывать: при запуске (скриптом, естественно) задачи, из доступного ресурса предварительно посредством xcopy с ключом /D копируются только изменённые или отсутствующие файлы. Пусть Ваш софт в папке Z:\Program, исполнимый файл bs3.exe, тогда:
@Echo Off

Set "SoftPath=Z:\Program"
Set "SoftExe=bs3.exe"

Set "BoxFrom=\\192.168.1.11\www\Factory"

xcopy "%BoxFrom%\*.*" "%SoftPath%\" /E /D /Y /H /R >nul

Cd /D "%SoftPath%\"

Start "" "%SoftPath%\%SoftExe%"
И не надо беготни, мотороллеров, самокатов, ерапланов.

Lorttt
17-06-2017, 17:25
Папку обновления просто переписать в папку с исполняемым кодом? »
У нас нет ехе файлов.
Из ехе только склсервер и апач, который не копируются.
Остальное в тхт. - которое надо копировать.

megaloman
17-06-2017, 18:21
Lorttt, в чём заключается процесс обновления, когда Вы его делаете руками?. Опишите процесс. Тогда можно не гадать, а попробовать что-то наваять для автоматизации. Надеюсь, это не составляет гостайны? Все равно, чем-то же задача запускается? Каким-нибудь браузером, например

Lorttt
17-06-2017, 19:08
браузером, например »

Любым браузером.

Например, надо сделать так, что бы нужные записи удалялись. + Кнопку для этого сделать + еще что то там , которое зависит от этого процесса.
Програмист получает задание. Изменяет/добавляет код в различные файлы тхт (которые в папке фэктори) .
После чего, просто эту папку упаковывает в архив и дает мне. И.. я побежал.
Пришел. переименовал локальную папку (если вдруг обновление кривое, то можно вернуться назад) и закинул новую. Все.

В идеале, при запуске задачи (скриптом, естественно) проверяется обновление, ставится и уж затем запускается задача. Однако это возможно, если задача не крутится у пользователя круглосуточно, иначе надо думать как корректно принудительно перезапускать задачу. »

Это одна из проблем. Пользователи с 8 утра и до 16.30 работают. Если им папочку заменить не останавливая работу, то потом, может быть такое, что будут работать и в пустую! Ничего не сохранится..
ВОт поэтому я и прихожу.
Пришел. Обновил. Почистил куки и вперед.

alpap
18-06-2017, 01:30
Мне поставили задачу, автоматизировать процесс »
Есть условие - можно выдвигать свои требования
У нас нет ехе файлов. »
есть почва для требований, вместо И.. я побежал. »
какие полномочия у вас в отношении сети, какие инструменты имеются на данном этапе, включая знания и насколько можно выбить себе для автоматизации процесса что-либо (на этот раз не мотороллер, программное обеспечение, например, бесплатное, но требующее установки).
подобная строка многое бы решила:

psexec -i \\ip-адрес удалённого компьютера -u Имя учётной записи -p пароль report.bat

megaloman
19-06-2017, 18:56
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. Вариант, который оставит Вас без работы и грозит увольнением
(Вы целый день этим вручную занимаетесь, теперь это будет делаться без Вас :lol: ).
Поставьте этот скрипт в запланированные задания в планировщике у клиента, чтобы он работал ежедневно несколько раз в день. Он сработает точно так же, как вручную. Единственное, зачем Вы нужны, выложить обновление на сервер. При отсутствии обновления пользователь работу скрипта не заметит. При обновлении пользователь в состоянии адекватно ответить.




© OSzone.net 2001-2012