备份同一文件夹中的文件时的后缀日期时间

备份同一文件夹中的文件时的后缀日期时间

当我备份文件夹中的文件或文件夹时,我会复制粘贴并重命名它。

D:/data.txt -> D:/data20200807.txt

是否有任何软件或系统设置可以做到这一点,这样我就不必按 F2 并手动重命名。只需按 ctrl+c ctrl+v。

答案1

通过添加当前日期字符串来重命名文件的上下文菜单项怎么样?如果合适,只需将以下代码复制到文本编辑器中,另存为文件.reg,然后右键单击新文件并选择Merge

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\AllFilesystemObjects\shell\Rename4Backup]
@="Rename (add date)"

[HKEY_CLASSES_ROOT\AllFilesystemObjects\shell\Rename4Backup\Command]
@="PowerShell -Command \"gi '%1' | Rename-Item -NewName { '{0}{1:yyyyMMdd}{2}' -f $_.BaseName, ( Get-Date ), $_.Extension }\""

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

答案2

  1. 编译此 autohotkey 脚本并执行它
  2. 选择文件和文件夹
  3. 按 ctrl+b

backup.ahk

^b::

sel := Explorer_GetSelected()

yy := SubStr(A_Now, 3, 2)
today = %yy%%A_MM%%A_DD%
todaynow = %yy%%A_MM%%A_DD%%A_Hour%%A_Min%%A_Sec%

;; For each parameter (or file dropped onto a script):
Loop, Parse, sel, `n
{
  ;; Fetch the contents of the variable whose name is contained in A_Index.
  GivenPath := A_LoopField
  
  SplitPath, GivenPath, sfilename, dir, ext, name_no_ext, drive

  dot_ext = %ext%
  if (ext) {
    dot_ext = .%ext%
  }
  backup_fullpathname = %dir%\%name_no_ext%%today%%dot_ext%
  

  if FileExist(backup_fullpathname) {
    backup_fullpathname = %dir%\%name_no_ext%%todaynow%%dot_ext%
  }

  ;; file or folder
  if InStr(FileExist(GivenPath), "D") {
    FileCopyDir, %GivenPath%, %backup_fullpathname%
  } else {
    FileCopy, %GivenPath%, %backup_fullpathname%
  }

}
return

;; https://autohotkey.com/board/topic/60985-get-paths-of-selected-items-in-an-explorer-window/
Explorer_GetPath(hwnd="")
{
  if !(window := Explorer_GetWindow(hwnd))
    return ErrorLevel := "ERROR"
  if (window="desktop")
    return A_Desktop
  path := window.LocationURL
  path := RegExReplace(path, "ftp://.*@","ftp://")
  StringReplace, path, path, file:///
  StringReplace, path, path, /, \, All 
  
  ; thanks to polyethene
  Loop
    If RegExMatch(path, "i)(?<=%)[\da-f]{1,2}", hex)
      StringReplace, path, path, `%%hex%, % Chr("0x" . hex), All
    Else Break
  return path
}

Explorer_GetAll(hwnd="")
{
  return Explorer_Get(hwnd)
}

Explorer_GetSelected(hwnd="")
{
  return Explorer_Get(hwnd,true)
}

Explorer_GetWindow(hwnd="")
{
  ; thanks to jethrow for some pointers here
    WinGet, process, processName, % "ahk_id" hwnd := hwnd? hwnd:WinExist("A")
    WinGetClass class, ahk_id %hwnd%
  
  if (process!="explorer.exe")
    return
  if (class ~= "(Cabinet|Explore)WClass")
  {
    for window in ComObjCreate("Shell.Application").Windows
      if (window.hwnd==hwnd)
        return window
  }
  else if (class ~= "Progman|WorkerW") 
    return "desktop" ; desktop found
}

Explorer_Get(hwnd="",selection=false)
{
  if !(window := Explorer_GetWindow(hwnd))
    return ErrorLevel := "ERROR"
  if (window="desktop")
  {
    ControlGet, hwWindow, HWND,, SysListView321, ahk_class Progman
    if !hwWindow ; #D mode
      ControlGet, hwWindow, HWND,, SysListView321, A
    ControlGet, files, List, % ( selection ? "Selected":"") "Col1",,ahk_id %hwWindow%
    base := SubStr(A_Desktop,0,1)=="\" ? SubStr(A_Desktop,1,-1) : A_Desktop
    Loop, Parse, files, `n, `r
    {
      path := base "\" A_LoopField
      IfExist %path% ; ignore special icons like Computer (at least for now)
        ret .= path "`n"
    }
  }
  else
  {
    if selection
      collection := window.document.SelectedItems
    else
      collection := window.document.Folder.Items
    for item in collection
      ret .= item.path "`n"
  }
  return Trim(ret,"`n")
}

相关内容