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

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

Ветеран


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

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


Ну, тогда примерно так:
читать дальше »
Код: Выделить весь код
Option Explicit

Const strFileName4Find = "prefs.js"

Dim objFSO
Dim strPath2Scan


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

ScanInSubFolders objFSO.GetFolder(strPath2Scan), strFileName4Find

Set objFSO = Nothing

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

'=============================================================================
' Based on: Серый форум / vbscript: поиск файла
' (url=http://forum.script-coding.com/viewtopic.php?id=2015)
'=============================================================================
Sub ScanInSubFolders(objFolder, strFileName)
	Dim objSubFolder
	Dim strFullFileName
	
	'WScript.Echo "Scan folder [" & objFolder.Path & "]"
	
	strFullFileName = objFSO.BuildPath(objFolder, strFileName)
	
	If objFSO.FileExists(strFullFileName) Then
		WScript.Echo "Found file [" & strFileName & "] in folder [" & objFolder.Path & "]"
		TryFindAndReplace objFSO.GetFile(strFullFileName)
		WScript.Echo
	End If
	
	On Error Resume Next
	
	For Each objSubFolder In objFolder.SubFolders
		If Err.Number = 0 Then
			On Error Goto 0
			ScanInSubFolders objSubFolder, strFileName
		Else
			Err.Clear
			On Error Goto 0
			WScript.Echo "Can't enumerate subfolders for folder [" & objFolder.Path & "]"
		End If
	Next
End Sub
'=============================================================================

'=============================================================================
Sub TryFindAndReplace(objFile)
	Dim strContent
	Dim strTempFileName
	
	With objFile.OpenAsTextStream()
		strContent = .ReadAll()
		.Close
	End With
	
	With WScript.CreateObject("VBScript.RegExp")
		'---------------------------------------------------------------------------
		.Pattern = "(\s*user_pref\(""mail\.server\.server2\.leave_on_server"",\s*)(true|false)(\s*\);\s*)"
		
		If .Test(strContent) Then
			strContent = .Replace(strContent, "$1true$3")
			WScript.Echo "  Set value of parameter [mail.server.server2.leave_on_server] to [true]"
		Else
			strContent = strContent & "user_pref(""mail.server.server2.leave_on_server"", true);" & vbCrLf
			WScript.Echo "  Add parameter [mail.server.server2.leave_on_server] and set value to [true]"
		End If
		'---------------------------------------------------------------------------
		
		'---------------------------------------------------------------------------
		.Pattern = "(\s*user_pref\(""mail.server.server2.num_days_to_leave_on_server"",\s*)(\d*)(\s*\);\s*)"
		
		If .Test(strContent) Then
			strContent = .Replace(strContent, "$114$3")
			WScript.Echo "  Set value of parameter [mail.server.server2.num_days_to_leave_on_server] to [14]"
		Else
			strContent = strContent & "user_pref(""mail.server.server2.num_days_to_leave_on_server"", 14);" & vbCrLf
			WScript.Echo "  Add parameter [mail.server.server2.num_days_to_leave_on_server] and set value to [14]"
		End If
		'---------------------------------------------------------------------------
		
		'---------------------------------------------------------------------------
		.Pattern = "\s*user_pref\(""mail.server.server2.delete_by_age_from_server"",\s*true\s*\);\s*"
		
		If .Test(strContent) Then
			strContent = .Replace(strContent, "")
			WScript.Echo "  Delete parameter [mail.server.server2.delete_by_age_from_server]"
		End If
		'---------------------------------------------------------------------------
		
		'---------------------------------------------------------------------------
		.Pattern = "\s*user_pref\(""mail.server.server2.delete_mail_left_on_server"",\s*true\s*\);\s*"
		
		If .Test(strContent) Then
			strContent = .Replace(strContent, "")
			WScript.Echo "  Delete parameter [mail.server.server2.delete_mail_left_on_server]"
		End If
		'---------------------------------------------------------------------------
	End With
	
	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
'=============================================================================


Но, в принципе, профиль может находиться в любом месте:
%AppData%\Thunderbird\profiles.ini
Код: Выделить весь код
…
[ProfileXX]
Name=<Profile Name>
IsRelative=0
Path=<Absolute path to Profile>
И мне не очень понятен подход с удалением параметров… Почему бы, вместо удаления, не установить их значения в «false», если они найдены?!
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:10, 11-06-2012 | #4