Batya

|
Posted: Fri Jun 24, 2011 14:15 Post subject: |
|
|
shveicar
vbs-скрипт:
Code: | '================================================================================
' Замена текста в файлах с помощью шаблонов.
' Шаблоны:
' %Name% - имя файла с расширением;
' %FromFileArr% - значение из соответствующей строки файла {файл со значениями замены}.
'
' Параметры:
' {текст для поиска} {текст для замены с шаблонами} {режим кавычек} {файл-список} [{файл со значениями замены}]
' где {режим кавычек}:
' 0 - без учёта (по умолчанию),
' 1 - считать одинарные кавычки в тексте для поиска\замены двойными
'================================================================================
Option Explicit
Dim FSO, WSH, F, FF, Mode, Str1, Str2, Errors, i, FZ, ArrZ
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSH = CreateObject("WScript.Shell")
Set Errors = CreateObject("Scripting.Dictionary")
With WScript
Str1 = .Arguments(0)
Str2 = .Arguments(1)
Mode = .Arguments(2)
FF = .Arguments(3)
If .Arguments.Count > 4 Then FZ = .Arguments(4)
End With
If InStr(1, Str2, "%FromFileArr%", 1) > 0 Then
ArrZ = Split(FSO.OpenTextFile(FZ, 1).ReadAll, vbNewLine, -1, 1)
End If
If Mode = 1 Then
Str1 = Replace(Str1, "'", """")
Str2 = Replace(Str2, "'", """")
End If
i = 0
On Error Resume Next
With FSO.OpenTextFile(FF, 1)
Do While Not .AtEndOfStream
i = i + 1
F = Trim(.ReadLine)
If F <> "" Then
F = FSO.GetAbsolutePathName(WSH.ExpandEnvironmentStrings(F))
If FSO.FileExists(F) Then
ReplaceInFile F, Str1, Str2, i
If Err.Number > 0 Then
Errors.Add F, Err.Description
Err.Clear
End If
End If
End If
Loop
.Close
End With
On Error GoTo 0
If Errors.Count > 0 Then MsgBox JoinErr(Errors), 0, "Замена текста в файлах с помощью шаблонов"
Set Errors = Nothing
Set WSH = Nothing
Set FSO = Nothing
WScript.Quit 0
Sub ReplaceInFile(pPath, pStr1, pStr2, pLevel)
Dim lText
If FSO.GetFile(pPath).Size > 0 Then
lText = FSO.OpenTextFile(pPath, 1, False, 0).ReadAll
If InStr(lText, pStr1) > 0 Then
lText = Replace(lText, pStr1, TemplReplace(pPath, pStr2, pLevel))
FSO.OpenTextFile(pPath, 2).Write lText
End If
End If
End Sub
Function JoinErr(pDic)
Dim lKey
For Each lKey In pDic
JoinErr = JoinErr & vbNewLine & _
"Файл """ & lKey & """ - " & pDic(lKey)
Next
JoinErr = "Для следующих файлов операция завершена с ошибками:" & vbNewLine & JoinErr
End Function
'Функция замены с помощью шаблонов
Function TemplReplace(pPath, pText, pLevel)
Dim lText, lRepl
lText = pText
lText = Replace(lText, "%Name%", FSO.GetFile(pPath).Name)
If IsArray(ArrZ) Then
If UBound(ArrZ) < (pLevel - 1) Then
lRepl = ""
Else
lRepl = ArrZ(pLevel - 1)
End If
lText = Replace(lText, "%FromFileArr%", lRepl)
End If
TemplReplace = lText
End Function
|
Кнопка для твоего случая:
Quote: | TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\WHS\TemplReplace.vbs
"<META HTTP-EQUIV='Refresh' CONTENT='0; URL=prise.zip'>" "<META HTTP-EQUIV='Refresh' CONTENT='0; URL=%%FromFileArr%%'>" 1 %L filelist.txt
shell32.dll,1
Массовая замена
-1
|
Из-за проблем передачи параметров, содержащих кавычки, пришлось ввести параметр {режим кавычек}. _________________ Нет, я не сплю. Я просто медленно моргаю.
Last edited by Batya on Mon Jun 27, 2011 18:09; edited 1 time in total |
|