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

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

Gisender 13-09-2014 20:02 2402441

vbs на заменение двух файлов
 
Код:

Option Explicit

Dim strProcessName
Dim arrPaths

Dim strLocalAppDataPath
Dim arrItem

Dim objSWbemServicesEx


strProcessName = "chrome.exe"

strLocalAppDataPath = WScript.CreateObject("Shell.Application").NameSpace("shell:Local AppData").self.Path

With WScript.CreateObject("Scripting.FileSystemObject")
        arrPaths = Array( _
                Array(.BuildPath(strLocalAppDataPath, "Google\Chrome\User Data"),        "Local State"), _
                Array(.BuildPath(strLocalAppDataPath, "Google\Chrome\User Data\Default"), "Preferences") _
        )
       
        For Each arrItem In arrPaths
                If Not .FileExists(arrItem(1)) Then
                        WScript.Echo "Source file [" & arrItem(1) & "] not found."
                        WScript.Quit 1
                End If
               
                If Not .FolderExists(arrItem(0)) Then
                        WScript.Echo "Destination folder [" & arrItem(0) & "] not found."
                        WScript.Quit 2
                End If
        Next
       
        Set objSWbemServicesEx = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
       
        Do
                WaitForCloseAllProcesses
               
                For Each arrItem In arrPaths
                        .CopyFile arrItem(1), .BuildPath(arrItem(0), arrItem(1)), True
                Next
               
                WaitForStartAnyProcess
        Loop
       
        Set objSWbemServicesEx = Nothing
End With

WScript.Quit 0
'=============================================================================

'=============================================================================
Sub WaitForCloseAllProcesses()
        Do Until objSWbemServicesEx.ExecQuery( _
                "SELECT * FROM Win32_Process WHERE Name = '" & strProcessName & "'" _
        ).Count = 0
                objSWbemServicesEx.ExecNotificationQuery( _
                        "SELECT * FROM __InstanceDeletionEvent " & _
                        "WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND " & _
                        "TargetInstance.Name = '" & strProcessName & "'" _
                ).NextEvent
        Loop
End Sub
'=============================================================================

'=============================================================================
Sub WaitForStartAnyProcess()
        objSWbemServicesEx.ExecNotificationQuery( _
                "SELECT * FROM __InstanceCreationEvent " & _
                "WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND " & _
                "TargetInstance.Name = '" & strProcessName & "'" _
        ).NextEvent
End Sub
'=============================================================================

Как сделать так что бы можно было указать откуда брать заменяемые файлы,что бы не из папки с vbs файлов, а к примеру local state и perferens были по пути %localappdata%\Google\Chrome\User Data\Default\Extensions\Chrome Temp\Preferences
%localappdata%\Google\Chrome\User Data\Default\Extensions\Chrome Temp\Local State и он их от туда брал и заменял
Автор Iska

Iska 13-09-2014 20:30 2402455

Цитата:

Цитата Gisender
что бы не из папки с vbs файлов »

Они как раз и берутся «не из папки с vbs файлом». Они берутся из текущего каталога. Если запускать скрипт без указания рабочего каталога, например — двойным щелчком из-под Проводника, текущий каталог просто-напросто совпадёт с каталогом, в котором находится скрипт. Не более.

Цитата:

Цитата Gisender
Как сделать так что бы можно было указать откуда брать заменяемые файлы »

Как обычно — указав путь:
Код:

        arrPaths = Array( _
                Array(.BuildPath(strLocalAppDataPath, "Google\Chrome\User Data"),        "Путь\Local State"), _
                Array(.BuildPath(strLocalAppDataPath, "Google\Chrome\User Data\Default"), "Путь\Preferences") _
        )

Цитата:

Цитата Gisender
а к примеру local state и perferens были по пути %localappdata%\Google\Chrome\User Data\Default\Extensions\Chrome Temp\Preferences
%localappdata%\Google\Chrome\User Data\Default\Extensions\Chrome Temp\Local State и он их от туда брал и заменял »

«Простите, кто на ком стоял?»

Gisender 14-09-2014 14:48 2402714

Цитата:

Цитата Iska
Код:
arrPaths = Array( _
Array(.BuildPath(strLocalAppDataPath, "Google\Chrome\User Data"), "Путь\Local State"), _
Array(.BuildPath(strLocalAppDataPath, "Google\Chrome\User Data\Default"), "Путь\Preferences") _
) »

А вот вы подписали где "Путь\Local State"), _ если они находятся в апп дате,как мне в начало пути это дописать? просто если путь начинается с
Код:

With WScript.CreateObject("Scripting.FileSystemObject")
        arrPaths = Array( _
                Array(.BuildPath(strLocalAppDataPath, "Google\Chrome\User Data"),        "Google\Chrome\User Data\Default\Extensions

\Chrome Temp\Local State"), _
                Array(.BuildPath(strLocalAppDataPath, "Google\Chrome\User Data\Default"), "Google\Chrome\User Data\Default\Extensions

\Chrome Temp\Preferences") _
        )

Not found

Iska 14-09-2014 15:08 2402721

Ничего не понял.

Gisender 14-09-2014 15:58 2402743

Цитата:

Цитата Iska
Ничего не понял. »

По такому пути не ищет Google\Chrome\User Data\Default\Extensions\Chrome Temp\Preferences") _ я так понял нужно в начало дописать переменную типа (%localappdata%),подскажите что дописать

Iska 14-09-2014 17:26 2402786

Цитата:

Цитата Gisender
По такому пути не ищет Google\Chrome\User Data\Default\Extensions\Chrome Temp\Preferences") »

Почему не ищет. Как раз таки именно по указанному Вами пути и ищет. Вот только, понятное дело, по несуществующему пути не находит.

Цитата:

Цитата Gisender
я так понял нужно в начало дописать переменную типа (%localappdata%),подскажите что дописать »

Вам виднее, что у Вас где. Попробуйте так:
Код:

        arrPaths = Array( _
                Array(.BuildPath(strLocalAppDataPath, "Google\Chrome\User Data"), .BuildPath(strLocalAppDataPath, "Путь\Local State")), _
                Array(.BuildPath(strLocalAppDataPath, "Google\Chrome\User Data\Default"), .BuildPath(strLocalAppDataPath, "Путь\Preferences")) _
        )


Gisender 15-09-2014 14:10 2403079

сделал,при запуске не выдает "not found" ,но когда закрывается браузер


Код:

Option Explicit

Dim strProcessName
Dim arrPaths

Dim strLocalAppDataPath
Dim arrItem

Dim objSWbemServicesEx


strProcessName = "chrome.exe"

strLocalAppDataPath = WScript.CreateObject("Shell.Application").NameSpace("shell:Local AppData").self.Path

With WScript.CreateObject("Scripting.FileSystemObject")
        arrPaths = Array( _
                Array(.BuildPath(strLocalAppDataPath, "Google\Chrome\User Data"), .BuildPath(strLocalAppDataPath, "Google\Chrome\User Data\Default\Extensions\Chrome Temp\Local State")), _
                Array(.BuildPath(strLocalAppDataPath, "Google\Chrome\User Data\Default"), .BuildPath(strLocalAppDataPath, "Google\Chrome\User Data\Default\Extensions\Chrome Temp\Preferences")) _
        )
       
        For Each arrItem In arrPaths
                If Not .FileExists(arrItem(1)) Then
                        WScript.Echo "Source file [" & arrItem(1) & "] not found."
                        WScript.Quit 1
                End If
               
                If Not .FolderExists(arrItem(0)) Then
                        WScript.Echo "Destination folder [" & arrItem(0) & "] not found."
                        WScript.Quit 2
                End If
        Next
       
        Set objSWbemServicesEx = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
       
        Do
                WaitForCloseAllProcesses
               
                For Each arrItem In arrPaths
                        .CopyFile arrItem(1), .BuildPath(arrItem(0), arrItem(1)), True
                Next
               
                WaitForStartAnyProcess
        Loop
       
        Set objSWbemServicesEx = Nothing
End With

WScript.Quit 0
'=============================================================================

'=============================================================================
Sub WaitForCloseAllProcesses()
        Do Until objSWbemServicesEx.ExecQuery( _
                "SELECT * FROM Win32_Process WHERE Name = '" & strProcessName & "'" _
        ).Count = 0
                objSWbemServicesEx.ExecNotificationQuery( _
                        "SELECT * FROM __InstanceDeletionEvent " & _
                        "WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND " & _
                        "TargetInstance.Name = '" & strProcessName & "'" _
                ).NextEvent
        Loop
End Sub
'=============================================================================

'=============================================================================
Sub WaitForStartAnyProcess()
        objSWbemServicesEx.ExecNotificationQuery( _
                "SELECT * FROM __InstanceCreationEvent " & _
                "WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND " & _
                "TargetInstance.Name = '" & strProcessName & "'" _
        ).NextEvent
End Sub
'=============================================================================


Iska 15-09-2014 16:24 2403127

Цитата:

Цитата Gisender
сделал,при запуске не выдает "not found" ,но когда закрывается браузер »

Не знаю, про какой браузер речь, но, поскольку у Вас теперь в «arrPaths» полные пути, то, соответственно и в:
Код:

                For Each arrItem In arrPaths
                        .CopyFile arrItem(1), .BuildPath(arrItem(0), arrItem(1)), True
                Next

полагаю, нужно оставить только:
Код:

                For Each arrItem In arrPaths
                        .CopyFile arrItem(1), arrItem(0), True
                Next

Опять же — не проверялось.

Gisender 15-09-2014 16:27 2403128

Цитата:

Цитата Iska
Не знаю, про какой браузер речь, но, поскольку у Вас теперь в «arrPaths» полные пути, то, соответственно и в: »

о хроме,вы же сами мне этот wsf сделали =)

Все равно ошибку выбивает

Iska 15-09-2014 16:53 2403139

Цитата:

Цитата Gisender
о хроме, »

Дошло наконец.

Цитата:

Цитата Gisender
Все равно ошибку выбивает »

Какую? Покажите (нажмите «Ctrl-C» в окне об ошибке и вставьте сюда).

Gisender 15-09-2014 16:55 2403141

теперь правда пишет "разрешение отклонено" где ошибка


Gisender 15-09-2014 18:42 2403197

Дак что в чем проблема? что вправить

Gisender 16-09-2014 10:13 2403391

ап тему
Iska у вас всегда лс забито?

Gisender 16-09-2014 17:14 2403534

Не вылет ошибка только в том случае если .CopyFile arrItem(1), arrItem(1), True ,за то на деле файлы не заменяются

Gisender 17-09-2014 09:04 2403796

ап тему


Время: 20:56.

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