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: [Кнопка] Аналог многострочного bat файла 
Author Message
taravasya



PostPosted: Tue Feb 26, 2013 14:05    Post subject: Reply with quote

Quote:
Plugins ‡ Scripts

Ну это очевидно. *.exe, тоже вообщем то не плагины. Но я не захотел создавать лишних папок, и сложил всё "кастомное" в папку plugins.
Я в vbs не силён.. скрипт выполняемый из первой кнопки, мне сваяли здесь же(на этом форуме). Смогли бы Вы подсказать, что нужно добавить в скрипте?
Code:
'===============================================
' Замена текста в файле с помощью рег. выражений
'
' Параметры:
' {файл} {текст для поиска} {текст для замены}
'===============================================
Option Explicit
Dim FSO, F, Str1, Str2, Text
Set FSO = CreateObject("Scripting.FileSystemObject")
With WScript
  F    = .Arguments(0)
  Str1 = .Arguments(1)
  Str2 = .Arguments(2)
End With
F = FSO.GetAbsolutePathName(CreateObject("WScript.Shell").ExpandEnvironmentStrings(F))

Text = FSO.OpenTextFile(F, 1).ReadAll
Text = RegExpReplace(Text, Str1, Str2)
FSO.OpenTextFile(F, 2).Write Text

Set FSO = Nothing

Dim FSOT, oTextFile, AllText, OTF, FileName, CommFile, CommLabel, CommLabelDel, BegFile, BegFileComm
Set FSOT   = CreateObject("Scripting.FileSystemObject")
Set OTF   = FSOT.OpenTextFile(WScript.Arguments(3), 1)
CommFile  = WScript.Arguments(4)
CommLabel = WScript.Arguments(5)
CommLabelDel = WScript.Arguments(6)

AllText = ""
If FSOT.FileExists(CommFile) Then
  Set oTextFile = FSOT.OpenTextFile(CommFile, 1)
  On Error Resume Next 'Игнорируем ошибку, если файл пустой
    AllText = oTextFile.ReadAll
  On Error GoTo 0
  oTextFile.Close
End If

Do While Not OTF.AtEndOfStream
  FileName = OTF.ReadLine
  If FSOT.FileExists(FileName) Then
    FileName = FSOT.GetFile(FileName).Name
  Else
    FileName = FSOT.GetFolder(FileName).Name
  End If
  If InStr(1, FileName, " ", 1) > 0 Then
    FileName = """" & FileName & """"
  End If
  BegFile = InStr(1, vbNewLine & AllText, vbNewLine & FileName & " ", 1)
  If BegFile > 0 Then
    BegFileComm = BegFile + Len(FileName) + 1
    If InStr(1, Mid(AllText, BegFileComm, Len(CommLabelDel)), CommLabelDel, 1) > 0 Then
      AllText = Left(AllText, BegFileComm - 1) & Mid(AllText, BegFileComm + Len(CommLabelDel))
      'Удаление лишних пробелов
      If Instr(BegFile, AllText, FileName & "  ", 1) > 0 Then
        AllText = Left(AllText, BegFileComm - 2) & Mid(AllText, BegFileComm)
      End If
      'Удаление пустых комментариев
      If Instr(BegFile, AllText & vbNewLine, FileName & " " & vbNewLine) > 0 Then
        AllText = Left(AllText, BegFile - 1) & Mid(AllText, BegFile + Len(FileName & " " & vbNewLine))
      End If
      'Удаление лишних концевых строк
      If Right(AllText, Len(vbNewLine)) = vbNewLine Then
        AllText = Left(AllText, Len(AllText) - Len(vbNewLine))
      End If
      Set oTextFile = FSOT.OpenTextFile(CommFile, 2)
      oTextFile.Write AllText
      oTextFile.Close
    End If
  End If
Loop

Set FSOT   = CreateObject("Scripting.FileSystemObject")
Set OTF   = FSOT.OpenTextFile(WScript.Arguments(3), 1)
CommFile  = WScript.Arguments(4)
CommLabel = WScript.Arguments(5)
CommLabelDel = WScript.Arguments(6)

Do While Not OTF.AtEndOfStream
  FileName = OTF.ReadLine
  If FSOT.FileExists(FileName) Then
    FileName = FSOT.GetFile(FileName).Name
  Else
    FileName = FSOT.GetFolder(FileName).Name
  End If
  If InStr(1, FileName, " ", 1) > 0 Then
    FileName = """" & FileName & """"
  End If
  BegFile = InStr(1, vbNewLine & AllText, vbNewLine & FileName & " ", 1)
  If BegFile > 0 Then
    BegFileComm = BegFile + Len(FileName) + 1
    If InStr(1, Mid(AllText, BegFileComm, Len(CommLabel)), CommLabel, 1) = 0 Then
      AllText = Left(AllText, BegFileComm - 1) & CommLabel & " " & Mid(AllText, BegFileComm)
      Set oTextFile = FSOT.OpenTextFile(CommFile, 2)
      oTextFile.Write AllText
      oTextFile.Close
    End If
  Else
    Set oTextFile = FSOT.OpenTextFile(CommFile, 8, 2)
    If Right(AllText, Len(vbNewLine)) <> vbNewLine Then
      oTextFile.WriteLine
      AllText = AllText & vbNewLine
    End If
    oTextFile.Write FileName & " " & CommLabel
    oTextFile.Close
    AllText = AllText & FileName & " " & CommLabel
  End If
Loop

OTF.Close
Set oTextFile = Nothing
Set OTF       = Nothing
Set FSOT       = Nothing
WScript.Quit 0

'Функция замены с помощью регулярных выражений
Function RegExpReplace(pText, pFindStr, pNewStr)
  Dim regEx
  Set regEx        = New RegExp
  regEx.Pattern    = pFindStr
  regEx.IgnoreCase = True
  regEx.Global     = True
  RegExpReplace    = regEx.Replace(pText, pNewStr)
  Set regEx        = Nothing
End Function

Скрипт универсальный, для трёх разных кнопок. Его действие изменяется в зависимости от входных параметров.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group