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
jehaz



PostPosted: Fri Aug 17, 2007 21:16    Post subject: Reply with quote

Вот скрипт который можно повесить на кнопку с параметром %L
Копирует выделенные файлы в ту же папку добавляя нумерацию копии в скобках идентично ТС.
Облазил форум, вроде такого не было.


Code:
'================================================================
' Параметры %L
' Создает копию выделенных файлов добавляя к имени порядковый
' номер в скобках (идентично TC). Если в имени уже присутствует
' порядковый номер в скобках, то увеличивает нумерацию до появления
' незанятого номера.
'================================================================
Option Explicit
Dim FSO, WSHArg, Argument, FileList, FileStr, FileFullName, Counter
Dim FileName, LenFileName, FileExt, FilePath, CounterLen, FileVName
Dim BetweenSkoba, OpenSkoba, BeforeSkoba, BetweenSkobaInt, TextStream
Set FSO = CreateObject("Scripting.FilesystemObject")
Set WSHArg = WScript.Arguments
If WSHArg.Count > 0 Then
  Argument = WSHArg.Item(0)
  Set FileList = FSO.GetFile(Argument)
  Set TextStream = FileList.OpenAsTextStream(1)
  FileStr = vbNullString
  While Not TextStream.AtEndOfStream
    FileStr = TextStream.ReadLine()
    Counter = 1
    FileName = FSO.GetBaseName(FileStr)
    CounterLen = Len(FileName)
    Do ' Работаем пока не найдется имя не занятое файлами
      If Mid(FileName,Len(FileName),1) = ")" Then ' Если в конце имени файла скобка, то возможно это уже ранее созданные копии файлов. Проверяем.
        Do While CounterLen <> 0
          If Mid(FileName,CounterLen,1) = "(" Then ' Если находится в имени закрытая скобка, то предположим что до скобок это имя, а в скобках нумерация копий
             OpenSkoba = CounterLen
             BetweenSkoba = Mid(FileName,OpenSkoba+1,Len(FileName)-CounterLen-1) ' Получаем значение находящиеся между скобками
             BeforeSkoba = Mid(FileName,1,OpenSkoba-1) ' Получаем предположительное имя до скобок
             CounterLen = 0
          Else
             CounterLen = CounterLen - 1
          End If
        Loop
        On Error Resume Next ' Отключаем ошибочку
        BetweenSkobaInt = FormatNumber(BetweenSkoba,0) ' Преобразуем междускобие в числовой формат
          If Err.Number = 0 Then ' Если ошибок нет, то в скобках было число
            If BetweenSkoba - BetweenSkobaInt = 0 Then ' Проверяем на всякий случай вдруг в скобках десятичная дробь
              FileName = BeforeSkoba ' Задаем имя как отобранное до скобок
              Counter = Counter + BetweenSkobaInt - 1
            End If
          End If
      End If
      CounterLen = 0
      Counter = Counter + 1
      FileExt = FSO.GetExtensionName(FileStr) ' получаем расширение
      FilePath = FSO.GetParentFolderName(FileStr) ' полный путь
      FileVName = FileName & "(" & Counter & ")" ' делаем новое имя
      If FileExt <> "" Then ' проверям на наличе расширения
          FileFullName = FilePath & "\" & FileVName & "." & FileExt ' Собираем имя в кучу
      Else
          FileFullName = FilePath & "\" & FileVName ' Без расширения куча
      End If
    Loop until not (FSO.FileExists(FileFullName) or FSO.FolderExists(FileFullName))
    If FSO.FileExists(FileStr) Then ' Еще раз проверяем наличие источника
    FSO.CopyFile FileStr, FileFullName ' Копируем
    End If
  Wend
End If
WScript.Quit


Немного подправил.


Last edited by jehaz on Mon Aug 20, 2007 16:55; edited 3 times in total
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group