option explicit ' Clipboard Attributes ' (C) 2015 Leo Davidson ' ' This is a script for Directory Opus. ' See http://www.gpsoft.com.au/DScripts/redirect.asp?page=scripts for development information. ' Called by Directory Opus to initialize the script Function OnInit(initData) initData.name = "Clipboard Attributes" initData.desc = "Copy and paste file timestamps" initData.copyright = "(C) 2015 Leo Davidson" initData.version = "1.0" initData.default_enable = true Dim cmd Set cmd = initData.AddCommand cmd.name = "ClipAttr" cmd.method = "OnClipAttr" cmd.desc = "" cmd.label = "ClipAttr" cmd.template = "COPY/S,PASTE/S" End Function ' Implement the ClipAttr command Function OnClipAttr(scriptCmdData) If (scriptCmdData.Func.args.got_arg.COPY) Then OnClipAttrCopy(scriptCmdData) ElseIf (scriptCmdData.Func.args.got_arg.PASTE) Then OnClipAttrPaste(scriptCmdData) End If End Function Function ZeroPad(s,c) ZeroPad = s Do While (Len(ZeroPad) < c) ZeroPad = "0" & ZeroPad Loop End Function Function DateTimeForCmd(d) DateTimeForCmd = ZeroPad(d.year,4) & "-" & ZeroPad(d.month,2) & "-" & ZeroPad(d.day,2) & " " _ & ZeroPad(d.hour,2) & ":" & ZeroPad(d.min,2) & ":" & ZeroPad(d.sec,2) End Function Function OnClipAttrCopy(scriptCmdData) scriptCmdData.func.command.deselect = False Dim vecModified, vecCreated, fileItem Set vecModified = DOpus.Create.Vector Set vecCreated = DOpus.Create.Vector For Each fileItem in scriptCmdData.func.sourcetab.selected vecModified.push_back( fileItem.modify ) vecCreated.push_back( fileitem.create ) Next Dim varMod, varCre Set varMod = Script.vars("vecModified") Set varCre = Script.vars("vecCreated") varMod.value = vecModified ' varMod.persist = True varCre.value = vecCreated ' varCre.persist = True End Function Function OnClipAttrPaste(scriptCmdData) Dim cmd, cmdLine Set cmd = scriptCmdData.func.command cmd.deselect = False If (Not (Script.vars.Exists("vecModified") And Script.vars.Exists("vecCreated"))) Then Exit Function End If Dim vecModified, vecCreated, mi, mt, ci, ct, fileItem Set vecModified = Script.vars.Get("vecModified") Set vecCreated = Script.vars.Get("vecCreated") mi = 0 ci = 0 mt = vecModified.count ct = vecCreated.count If (mt = 0 Or ct = 0) Then Exit Function End If For Each fileItem in scriptCmdData.func.sourcetab.selected cmdLine = "SetAttr MODIFIED=""" & DateTimeForCmd(vecModified(mi)) _ & """ CREATED=""" & DateTimeForCmd(vecCreated(ci)) & """" cmd.ClearFiles cmd.AddFile fileItem cmd.RunCommand(cmdLine) mi = mi + 1 ci = ci + 1 If (mi >= mt) Then mi = 0 If (ci >= ct) Then ci = 0 Next End Function