Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Сообщения: 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