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