'==================================================================================
' Изменение даты и времени выбранных файлов и папок активной панели на дату и время
' указанного файла/папки с возможностью рекурсивной обработки содержимого папок
' Параметры: "<путь к файлу>" %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 |