PDA

Показать полную графическую версию : [решено] vbs на заменение двух файлов


Gisender
13-09-2014, 20:02
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
что бы не из папки с vbs файлов »
Они как раз и берутся «не из папки с vbs файлом». Они берутся из текущего каталога. Если запускать скрипт без указания рабочего каталога, например — двойным щелчком из-под Проводника, текущий каталог просто-напросто совпадёт с каталогом, в котором находится скрипт. Не более.

Как сделать так что бы можно было указать откуда брать заменяемые файлы »
Как обычно — указав путь:
arrPaths = Array( _
Array(.BuildPath(strLocalAppDataPath, "Google\Chrome\User Data"), "Путь\Local State"), _
Array(.BuildPath(strLocalAppDataPath, "Google\Chrome\User Data\Default"), "Путь\Preferences") _
)


а к примеру 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
Код:
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
Ничего не понял.

Gisender
14-09-2014, 15:58
Ничего не понял. »

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

Iska
14-09-2014, 17:26
По такому пути не ищет Google\Chrome\User Data\Default\Extensions\Chrome Temp\Preferences") »
Почему не ищет. Как раз таки именно по указанному Вами пути и ищет. Вот только, понятное дело, по несуществующему пути не находит.

я так понял нужно в начало дописать переменную типа (%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
сделал,при запуске не выдает "not found" ,но когда закрывается браузер
http://f5.s.qip.ru/NGYkK5yE.png

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
сделал,при запуске не выдает "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
Не знаю, про какой браузер речь, но, поскольку у Вас теперь в «arrPaths» полные пути, то, соответственно и в: »
о хроме,вы же сами мне этот wsf сделали =)

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

Iska
15-09-2014, 16:53
о хроме, »
Дошло наконец.

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

Gisender
15-09-2014, 16:55
теперь правда пишет "разрешение отклонено" где ошибка

http://f6.s.qip.ru/NGYkK5zr.png

Gisender
15-09-2014, 18:42
Дак что в чем проблема? что вправить

Gisender
16-09-2014, 10:13
ап тему
Iska у вас всегда лс забито?

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

Gisender
17-09-2014, 09:04
ап тему




© OSzone.net 2001-2012