Ветеран
Сообщения: 27449
Благодарности: 8087
|
Профиль
|
Отправить PM
| Цитировать
Цитата batyaPS:
можно ли изменить рекурсию до одной папки? »
|
Можно.
Цитата batyaPS:
Цитата Iska:
Кстати, будем пробовать скрипт без удаления, только с добавлением/изменением значений? »
|
давай попробуем »
|
Скрипт упростился, пробуем:
читать дальше »
Код: 
Option Explicit
Const strFileName4Find = "prefs.js"
Dim objFSO
Dim objFolder
Dim strPath2Scan
Dim strFullFileName
If WScript.Arguments.Count <> 1 Then
WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptFullName & """ <Path to scan for 'prefs.js' file>"
WScript.Quit 1
End If
strPath2Scan = WScript.Arguments.Item(0)
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If Not objFSO.FolderExists(strPath2Scan) Then
WScript.Echo "Folder [" & strPath2Scan & "] not found"
WScript.Quit 2
End If
For Each objFolder In objFSO.GetFolder(strPath2Scan).SubFolders
strFullFileName = objFSO.BuildPath(objFolder, strFileName4Find)
If objFSO.FileExists(strFullFileName) Then
WScript.Echo "Found file [" & strFileName4Find & "] in folder [" & objFolder.Path & "]"
TryFindAndReplace objFSO.GetFile(strFullFileName)
WScript.Echo
End If
Next
Set objFSO = Nothing
WScript.Quit 0
'=============================================================================
'=============================================================================
Sub TryFindAndReplace(objFile)
Dim objDictionary
Dim strContent
Dim strKey
Dim strTempFileName
Set objDictionary = WScript.CreateObject("Scripting.Dictionary")
objDictionary.Add "mail.server.server2.leave_on_server", Array("true|false", "true")
objDictionary.Add "mail.server.server2.num_days_to_leave_on_server", Array("\d*", "14")
objDictionary.Add "mail.server.server2.delete_by_age_from_server", Array("true|false", "false")
objDictionary.Add "mail.server.server2.delete_mail_left_on_server", Array("true|false", "false")
objDictionary.Add "mail.server.server2.check_time", Array("\d*", "5")
objDictionary.Add "mail.server.server2.login_at_startup", Array("true|false", "false")
With objFile.OpenAsTextStream()
strContent = .ReadAll()
.Close
End With
With WScript.CreateObject("VBScript.RegExp")
For Each strKey In objDictionary.Keys
.Pattern = "(\s*user_pref\(""" & Replace(strKey, ".", "\.") & """,\s*)(" & objDictionary.Item(strKey)(0) & ")(\s*\);\s*)"
If .Test(strContent) Then
strContent = .Replace(strContent, "$1" & objDictionary.Item(strKey)(1) & "$3")
WScript.Echo " Set value of parameter [" & strKey & "] to [" & objDictionary.Item(strKey)(1) & "]"
Else
strContent = strContent & "user_pref(""" & strKey & """, " & objDictionary.Item(strKey)(1) & ");" & vbCrLf
WScript.Echo " Add parameter [" & strKey & "] and set value to [" & objDictionary.Item(strKey)(1) & "]"
End If
Next
End With
objDictionary.RemoveAll
Set objDictionary = Nothing
With objFSO
strTempFileName = GetTemporaryName()
With .CreateTextFile(strTempFileName)
.Write strContent
.Close
End With
.CopyFile objFile.Path, .BuildPath(objFile.ParentFolder, .GetBaseName(objFile.Name) & ".bak"), True
.CopyFile strTempFileName, objFile.Path
.DeleteFile strTempFileName
End With
End Sub
'=============================================================================
'=============================================================================
' Серый форум / vbscript: генерация пути для временного файла или папки
' (http://forum.script-coding.com/viewtopic.php?id=1221)
'=============================================================================
Function GetTemporaryName()
Const TemporaryFolder = 2
Dim strTempName
With WScript.CreateObject("Scripting.FileSystemObject")
Do
strTempName = .BuildPath(.GetSpecialFolder(TemporaryFolder), .GetTempName)
Loop While .FileExists(strTempName) Or .FolderExists(strTempName)
End With
GetTemporaryName = strTempName
End Function
'=============================================================================
|
Отправлено: 00:29, 14-06-2012
| #10
|