Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Редактирование файлов (вырезать, вставить, массово) 
Author Message
Batya



PostPosted: Fri Jun 24, 2011 14:15    Post subject: Reply with quote

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
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group