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: Wed Dec 01, 2010 15:17    Post subject: Reply with quote

zlll wrote:
В скрипте используется текущее время и дата, это я так понимаю файлы будут переименованы с датой и временем запуска скрипта, так? Нужно жеж время создания или модификации файлов

Прошу прощения.
Действительно тот скрипт делает немного не то, что тебе нужно. Сделал новый:
Code:
'==============================================================
' Переименование файлов\папок в файле-списке по заданной маске.
'   Возможные элементы маски (с учётом регистра):
'   NNN  - имя файла\папки;
'   EEE  - расширение - только для файлов;
'   YYYY - год - 4 цифры;
'   YY   - год - 2 последние цифры;
'   DD   - день - всегда 2 цифры;
'   D    - день - убирается лидирующий 0;
'   MM   - месяц - всегда 2 цифры;
'   M    - месяц - убирается лидирующий 0;
'   hh   - час - всегда 2 цифры;
'   h    - час - убирается лидирующий 0;
'   mm   - минута - всегда 2 цифры;
'   m    - минута - убирается лидирующий 0;
'   ss   - секунда - всегда 2 цифры;
'   s    - секунда - убирается лидирующий 0;
'   ..   - точка (1 символ) - только для файлов;
'   ##   - при существовании файла\папки маска возвращает следующий номер в виде [N].
'
' Параметры:
' {файл-список} [{режим} [{маска}]]
'
' Здесь {режим} может принимать значения:
' 0 - используется текущая дата-время (по умолчанию),
' 1 - используется дата-время создания файла\папки,
' 2 - используется дата-время модификации файла\папки,
' 3 - используется дата-время доступа файла\папки.
'
' Параметры "режим" и "маска" являются необязательными -
'   будет использовано значение по умолчанию.
'
' Пример параметров при вызове из TC:
' %L 1 "NNN_YYYY-MM-DD`hh-mm-ss..EEE"
'==============================================================
Option Explicit
'====== Изменяемые параметры ==================================
' Маска по умолчанию
Const DefaultMask = "NNN_YYYY-MM-DD`hh-mm-ss##..EEE"
Const DefaultMode = 0
'==============================================================
Dim FSO, List, F, Mask, MaskTime, E, Mode, m
Dim NewName, NewNameN, NewNameP
Set FSO = CreateObject("Scripting.FileSystemObject")
Set E   = CreateObject("Scripting.Dictionary")

With WScript
  List = .Arguments(0)
  If .Arguments.Count > 1 Then
    Mode = .Arguments(1)
  Else
    Mode = DefaultMode
  End If
  If .Arguments.Count > 2 Then
    Mask = .Arguments(2)
  Else
    Mask = DefaultMask
  End If
End With

For Each m In Array("YYYY", "YY", "DD", "D", "MM", "M", "hh", "h", "mm", "m", "ss", "s", "NNN", "EEE", "..")
  E.Add m, ""
Next

If Mode = 0 Then SetMaskArray1(Now)

For Each F In Split(FSO.OpenTextFile(List).ReadAll, vbNewLine)
  If F <> "" Then
    SetMaskArray2(F)
    NewName  = ReplaceAll(Mask, E)
    NewNameN = Replace(NewName, "##", "")
    NewNameP = FSO.GetParentFolderName(F) & "\" & NewNameN
    If (FSO.FileExists(NewNameP) Or FSO.FolderExists(NewNameP)) And (InStr(NewName, "##") > 0) Then
      NewNameN = GetNextName(FSO.GetParentFolderName(F), NewName)
    End If
    If FSO.FileExists(F) Then
      FSO.GetFile(F).Name = NewNameN
    ElseIf FSO.FolderExists(F) Then
      FSO.GetFolder(F).Name = NewNameN
    End If
  End If
Next

Set E   = Nothing
Set FSO = Nothing
WScript.Quit

Function ReplaceAll(pName, pDic)
  Dim lK
  ReplaceAll = pName
  For Each lK In pDic.Keys
    ReplaceAll = Replace(ReplaceAll, lK, pDic(lK), 1, -1, 0)
  Next
End Function

Sub SetMaskArray1(pMaskTime)
  E("YYYY") = Year(pMaskTime)
  E("YY"  ) = Right(Year(pMaskTime), 2)
  E("DD"  ) = Right("0" & Day(pMaskTime), 2)
  E("D"   ) = Day(pMaskTime)
  E("MM"  ) = Right("0" & Month(pMaskTime), 2)
  E("M"   ) = Month(pMaskTime)
  E("hh"  ) = Right("0" & Hour(pMaskTime), 2)
  E("h"   ) = Hour(pMaskTime)
  E("mm"  ) = Right("0" & Minute(pMaskTime), 2)
  E("m"   ) = Minute(pMaskTime)
  E("ss"  ) = Right("0" & Second(pMaskTime), 2)
  E("s"   ) = Second(pMaskTime)
End Sub

Sub SetMaskArray2(pPath)
  Dim lMaskTime, lF
  If FSO.FileExists(pPath) Then
    Set lF   = FSO.GetFile(pPath)
    E("NNN") = FSO.GetBaseName(pPath)
    E("EEE") = FSO.GetExtensionName(pPath)
    E("..")  = "."
  ElseIf FSO.FolderExists(pPath) Then
    Set lF   = FSO.GetFolder(pPath)
    E("NNN") = lF.Name
    E("EEE") = ""
    E("..")  = ""
  End If

  If Mode > 0 Then
    Select Case Mode
      Case 1 lMaskTime = lF.DateCreated
      Case 2 lMaskTime = lF.DateLastModified
      Case 3 lMaskTime = lF.DateLastAccessed
    End Select
    SetMaskArray1(lMaskTime)
  End If

  Set lF = Nothing
End Sub

Function GetNextName(pPath, pName)
  Dim i, lName
  i = 0
  Do
    i = i + 1
    lName = Replace(pName, "##", "[" & CStr(i) & "]")
  Loop Until Not (FSO.FileExists(pPath & "\" & lName) Or FSO.FolderExists(pPath & "\" & lName))
  GetNextName = lName
End Function


Есть небольшая проблема. У тебя эти файлы уже с расширением mp3, или расширение нужно тоже задавать?
Дело в том, что в "mp3" входит буква "m", которая является в то же время маской для минут.
_________________
Нет, я не сплю. Я просто медленно моргаю.


Last edited by Batya on Wed Dec 01, 2010 15:23; edited 1 time in total
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group