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
Flasher



PostPosted: Sat Sep 08, 2012 22:58    Post subject: Reply with quote

Ну, вообще, конечно, не помешает. Пробуйте.

Code:
'==================================================================================
' Изменение даты и времени выбранных файлов и папок активной панели на дату и время
' указанного файла/папки с возможностью рекурсивной обработки содержимого папок

' Параметры: "<путь к файлу>" %WL <индекс замены> <флаг рекурсии: 1>

' Путь к файлу: %V (активной панели) | %T%M (пассивной панели)

' Индекс замены принимает следующие значения:
' 1 - даты создания
' 2 - даты модификации
' 3 - даты последнего открытия
' 4 - даты создания и модификации
' 5 - даты создания и последнего открытия
' 6 - даты модификации и последнего открытия
' 7 - даты модификации, создания и последнего открытия

' Примеры параметров:  %T%M %WL 2  |  %V %WL 7  |  "C:\Тест" %WL 4 1

' Автор: Flasher ©
'================================= Путь к NirCmd ==================================
Nircmd = """%COMMANDER_PATH%\Utils\nircmd\nircmd.exe"""
'==================================================================================
With WScript.Arguments
  C = .Count : If C = 0 Then Quit
  File = .Item(0) : List = .Item(1) : Count = .Item(2)
End With : L = vbNewLine
If Not IsNumeric(Count) Then Msg
If Count < 1 Or Count > 7 Then Msg
Sub Msg
  MsgBox "Недопустимый индекс замены!"&L&L&"Смотрите описание.", 48, Space(30) & "Ошибка"
  WScript.Quit
End Sub

Set FSO   = CreateObject("Scripting.FileSystemObject")
Dim WSH : Set WSH = CreateObject("Wscript.Shell")
Set Shell = CreateObject("Shell.Application")

If FSO.FileExists(File) Then Set File  = FSO.GetFile(File) Else Set File = FSO.GetFolder(File)
DC = File.DateCreated : DM = File.DateLastModified : DA = File.DateLastAccessed
Repl DC : Repl DM : Repl DA : Set File = Nothing

Sub Repl(DT)
  Dy = Day(DT) : Mh = Month(DT) : Yr = Year(DT) : Hr = Hour(DT) : Mn = Minute(DT) : Sc = Second(DT)
  Num(Dy)(Mh)(Yr)(Hr)(Mn)(Sc)(Sc)
  If InStrRev(DT, "P") Then : If Hr < 12 Then Hr = Hr + 12 : End If
  DT = """" & Dy & "-" & Mh & "-" & Yr & " " & Hr & ":" & Mn & ":" & Sc & """"
End Sub

Function Num(DateT)
  If Len(DateT) = 1 Then DateT = "0" & DateT
  Set Num = GetRef("Num")
End Function

Select Case Count
  Case 1 P = DC
  Case 2 P = """"" " & DM
  Case 3 P = """"" """" " & DA
  Case 4 P = DC & " " & DM
  Case 5 P = DC & " """" " & DA
  Case 6 P = """"" " & DM & " " & DA
  Case 7 P = DC & " " & DM & " " & DA
End Select

For Each F in Split(FSO.GetFile(List).OpenAsTextStream(1, -1).ReadAll, L)
  If FSO.FolderExists(F) Then
    F = Left(F, Len(F) - 1) : ForFile F, P
    If C = 4 Then : Set F = FSO.GetFolder(F) : ForFolder F, P : End If
  Else ForFile F, P : End If
Next : Set FSO = Nothing : Set WSH = Nothing : Set Shell = Nothing : WScript.Quit

Sub ForFolder(Fd, Par)
  For Each Fl In Fd.SubFolders : ForFile Fl, Par : ForFolder Fl, Par : Next
  For Each Fl In Fd.Files      : ForFile Fl, Par : Next
End Sub
Sub ForFile(FF, PP) : WSH.Run Nircmd & " setfilefoldertime """ & FF & """ " & PP, 0, True : End Sub


Last edited by Flasher on Sun Sep 16, 2012 17:34; edited 5 times in total
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group