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 

Переименование группы файлов по их дате и времени
Goto page 1, 2, 3, 4, 5  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
zlll



Joined: 01 Dec 2010
Posts: 5

Post (Separately) Posted: Wed Dec 01, 2010 13:22    Post subject: Переименование группы файлов по их дате и времени Reply with quote

День добрый.
Честно искал решения задачи, не нашёл. Возможно плохо искал Smile
Задача состоит в следующем. Имеется группа файлов, которые нужно каждый день переименовывать в формат YYYY-MM-DD_HH-MM-SS.mp3. (дата и время должны быть создания или модификации файла)Естественно этот процесс нужно автоматизировать. Решением может быть батник, который будет запускаться по средствам планировщика заданий.

Вопрос, как заставить работать Групповое переименование файлов из тотала, по сохранённому шаблону по средствам командной строки?
Как-то вот так заковыристо.

Помогите пожалуйста

 !  Avada:
Заголовок изменён.Тема перенесена из "Общих вопросов" в "Автоматизацию".
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2221
Location: Москва, Россия

Post (Separately) Posted: Wed Dec 01, 2010 13:31    Post subject: Reply with quote

zlll
Можно воспользоваться vbs-скриптом.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
zlll



Joined: 01 Dec 2010
Posts: 5

Post (Separately) Posted: Wed Dec 01, 2010 13:50    Post subject: Reply with quote

Batya, спасибо
В скрипте используется текущее время и дата, это я так понимаю файлы будут переименованы с датой и временем запуска скрипта, так? Нужно жеж время создания или модификации файлов
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Wed Dec 01, 2010 14:27    Post subject: Reply with quote

Если без секунд, можно простенький бат-файлик.
Code:
@echo off
title File Rename YYYY-MM-DD_HH-MM-SS
if -%1==- echo Parameters: %%WL&pause&goto :EOF
if -%1==-go goto process_file
for /f "usebackq delims=" %%f in (`type %1`) do call %0 go "%%f"
goto :EOF

:process_file
set datetime=%~t2
set newname=%datetime:~6,4%-%datetime:~3,2%-%datetime:~0,2%_%datetime:~11,2%-%datetime:~14,2%%~x2
ren %2 %newname%

Можно как по списку переименовывать - тогда файл списка в параметре, так и по отдельным файлам - тогда в параметрах слово go и имя файла.

Но вопрос - что делать, если файл с новым именем уже существует? Думаю, он касается любого алгоритма.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2221
Location: Москва, Россия

Post (Separately) Posted: 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
Back to top
View user's profile Send private message
zlll



Joined: 01 Dec 2010
Posts: 5

Post (Separately) Posted: Wed Dec 01, 2010 15:17    Post subject: Reply with quote

MVV
спасибо большое! Как уже преобразовать под наши задачи, будем думать Smile
Back to top
View user's profile Send private message
zlll



Joined: 01 Dec 2010
Posts: 5

Post (Separately) Posted: Thu Dec 02, 2010 06:37    Post subject: Reply with quote

Batya и вам большое спасибо Smile
Back to top
View user's profile Send private message
Lisabon



Joined: 18 Feb 2011
Posts: 147

Post (Separately) Posted: Fri Feb 18, 2011 00:31    Post subject: Добавление к имени каталога/файла системной даты Reply with quote

Собственно необходим скрипт, для автоматизации следующих действий:

к уже существующему каталогу/файлу, у которого уже есть своё произвольное имя, дописать в конце имени каталога/файла нижнее подчёркивание и после системную дату, например, каталог с именем "Downloads" после применения скрипта принял вид вот такой: "Downloads_17.02.2011" , где 17.02.2011 - системная дата день. месяц. год.

Если возможно, то в скрипте предусмотреть параметр, который позволил бы ещё к системной дате приписывать системное время, например, каталог с именем "Downloads" после применения скрипта принял вид вот такой: "Downloads_17.02.2011_22.28.15" , где 17.02.2011 - системная дата, а 22.28.15 - системное время час. мин. сек
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Feb 18, 2011 05:08    Post subject: Reply with quote

Скрипт не сложно сделать, но пока рекомендую пару программ, решающих задачу: 1, 2.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Fri Feb 18, 2011 06:33    Post subject: Reply with quote

Вообще-то 1, 2
[offtop]
Avada, название темы со скриптом какое-то... не очень
[/offtop]
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Fri Feb 18, 2011 09:20    Post subject: Reply with quote

Можно и батником:
Code:
@echo off
if -%1==- echo Parameters: %%WL&pause &goto :EOF

if -%1==-go goto do_work
for /f "usebackq delims=" %%f in (`type %1`) do call %0 go "%%f" %2
pause
goto :EOF

:do_work
set tm=%TIME%
set tm=%tm:~0,2%.%tm:~3,2%.%tm:~6,2%
if "%tm:~0,1%"==" " set tm=0%tm:~1%

set append=%DATE%
if not -%3==- set append=%append%_%tm%

set name=%~dpn2
if "%name:~-1%"=="\" set name=%name:~0,-1%

echo %name%
move "%name%" "%name%_%append%%~x2"


Обрабатывает все выделенные папки/каталоги. В строке параметров кнопки нужно указать %WF. Если второй параметр не пуст (т.е. что-то написано через пробел после %WF), то время тоже будет приписываться.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Lisabon



Joined: 18 Feb 2011
Posts: 147

Post (Separately) Posted: Fri Feb 18, 2011 10:45    Post subject: Reply with quote

Tol!k wrote:
Вообще-то 1, 2
[offtop]
Avada, название темы со скриптом какое-то... не очень
[/offtop]


Скрипт от туда помог мне решить задачу как для каталога, так и для файла. Спасибо всем кто откликнулся!!!

Тему можно перенести сюда
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10352
Location: Россия, Саратов

Post (Separately) Posted: Fri Feb 18, 2011 11:51    Post subject: Reply with quote

Lisabon wrote:
Тему можно перенести сюда

Так и сделаем.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
desenntir



Joined: 20 Apr 2011
Posts: 1
Location: Москва

Post (Separately) Posted: Wed Apr 20, 2011 09:54    Post subject: Reply with quote

Спасиб за решения пользуюсь vbs-скриптом все четко как мне надо.
_________________
не все вечное
Back to top
View user's profile Send private message
SaDim



Joined: 22 May 2011
Posts: 18

Post (Separately) Posted: Wed Jan 20, 2016 18:08    Post subject: Reply with quote

Помогите пожалуйста.
Надо к имени папки (файла) добавлять текущую дату.
Было так xxx (zzz.ini) стало xxx_2016.01.20 (zzz_2016.01.20.ini)
Спасибо.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page 1, 2, 3, 4, 5  Next
Page 1 of 5

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group