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: автопереименование группы файлов 36-ричным счётчиком 
Author Message
Batya



PostPosted: Tue Feb 09, 2010 01:21    Post subject: Reply with quote

CaptainFlint wrote:
Если очень хочется, можно поковыряться с плагином script_wdx

Не очень удачный вариант, т. к. счетчик в новых именах нужно наращивать и где-то хранить промежуточные значения.

Сделал vbs-скрипт. Хорошенько погонять его времени нет. Проверь, правильно ли работает.
Code:
'===================================================
' Переименование файлов и папок из файла-списка
'   по заданному счетчику
'
' Параметры:
' {файл-список}
'
' Пример параметров при вызове из TC:
' %L
'===================================================
Option Explicit
'======== Изменяемые параметры =====================
' Символы счетчика
Const Counter = "0123456789abcdefghijklmnopqrstuvwxyz"
' Лидирующий символ
Const FirstSymbol = " "
'Const FirstSymbol = "0"
'===================================================

Dim FSO, WSH, Str, List, N, i, F, Rank, K
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSH = CreateObject("WScript.Shell")
Str     = FSO.OpenTextFile(GetPath(WScript.Arguments(0))).ReadAll
List    = Split(Str, vbNewLine)
N       = UBound(List)
If List(N) = "" Then N = N - 1
Rank = Len(Counter)
K    = -Int(-Log(N+1)/Log(Rank))

For i = 1 To N + 1
  F = GetPath(List(i - 1))
  If FSO.FolderExists(F) Then
    FSO.GetFolder(F).Name = Trim(Right(String(K, FirstSymbol) & GetWord(i), K))
  End If
  If FSO.FileExists(F) Then
    FSO.GetFile(F).Name = Trim(Right(String(K, FirstSymbol) & GetWord(i), K)) & "." & FSO.GetExtensionName(F)
  End If
Next

Set WSH = Nothing
Set FSO = Nothing
WScript.Quit 0

Function GetPath(pPath)
  GetPath = FSO.GetAbsolutePathName(WSH.ExpandEnvironmentStrings(pPath))
End Function

Function GetWord(pNumber)
  Dim ln, lm, lRes
  ln   = Int(pNumber/Rank)
  lm   = pNumber Mod Rank
  lRes = Mid(Counter, lm + 1, 1)
  If ln > 0 Then lRes = GetWord(ln) + lRes
  GetWord = lRes
End Function

_________________
Нет, я не сплю. Я просто медленно моргаю.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group