Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Переименование папки и копирование новой из сети.

Ответить
Настройки темы
CMD/BAT - Переименование папки и копирование новой из сети.

Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте.
Мне поставили задачу, автоматизировать процесс обновления программы.
Что бы Вы понимали, мне нужно почти каждый день, переименовать локальную и скопировать из сети новую папку (обновление) примерно на 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
Благодарности: 8088

Профиль | Отправить PM | Цитировать


megaloman, я знаком с подобным подходом не понаслышке. Замечу токмо, что покупать надо не самокат, а фанеру, строить из неё ероплан и рулить оттель к едрене фене.
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:30, 17-06-2017 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить 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


Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


Iska, Не всегда Едрена Феня доступна. Маленький городок, одно предприятие, работа за 3 копейки за счастье - на улице толпа голодных безработных. А уехать - семейные обстоятельства. Как-то на очень профессиональных курсах нечто подобное изложил преподавателю, как живётся айтишнику, он выдал запоминающуюся фразу: вы не на те курсы приехали, вам на курсы изменения менталитета.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 13:10, 17-06-2017 | #13


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


megaloman, Вы меня недооцениваете, коллега . Я именно так и живу. Только округлите «маленький городок» в ещё меньшую сторону.

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

Отправлено: 13:25, 17-06-2017 | #14


Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


Цитата Lorttt:
Проблема в том, что программист что-то где то в коде изменяет и дает потом целую папку. Версионность непонятно как определять. »
А в чём заключается процесс обновления? Папку обновления просто переписать в папку с исполняемым кодом? Тогда вообще всё просто. Зачем что-то куда-то переименовывать: при запуске (скриптом, естественно) задачи, из доступного ресурса предварительно посредством 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%"
И не надо беготни, мотороллеров, самокатов, ерапланов.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 14:46, 17-06-2017 | #15


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:25, 17-06-2017 | #16


Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:21, 17-06-2017 | #17


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
браузером, например »
Любым браузером.

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

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

Отправлено: 19:08, 17-06-2017 | #18


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата Lorttt:
Мне поставили задачу, автоматизировать процесс »
Есть условие - можно выдвигать свои требования
Цитата Lorttt:
У нас нет ехе файлов. »
есть почва для требований, вместо
Цитата Lorttt:
И.. я побежал. »
какие полномочия у вас в отношении сети, какие инструменты имеются на данном этапе, включая знания и насколько можно выбить себе для автоматизации процесса что-либо (на этот раз не мотороллер, программное обеспечение, например, бесплатное, но требующее установки).
подобная строка многое бы решила:
Код: Выделить весь код
psexec -i \\ip-адрес удалённого компьютера -u Имя учётной записи -p пароль report.bat

Последний раз редактировалось alpap, 18-06-2017 в 01:36.


Отправлено: 01:30, 18-06-2017 | #19


Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Переименование папки и копирование новой из сети.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход