当我备份文件夹中的文件或文件夹时,我会复制粘贴并重命名它。
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
- 编译此 autohotkey 脚本并执行它
- 选择文件和文件夹
- 按 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")
}