我经常将文件复制并粘贴到同一个文件夹中(快速按 Ctrl+C,然后按 Ctrl+V)。
似乎 Windows 的默认行为是将重复文件重命名为“文件名- 复制。扩大“。
相反,我想让重复的文件立即“请求”一个新名称 - 让重命名框抓住焦点,这样我就可以重命名文件并避免冲突。
这可能吗?
答案1
Ctrl+C、Ctrl+V、F2
我就是这么做的。因为当你从不同的文件夹复制时,这看起来不可能实现。
答案2
谢谢@卡兰对于问题评论中的 AutoHotkey 想法。
以下脚本从 Explorer 中当前选定的文件中获取文件名,显示一个消息框以输入新名称,然后创建该文件的副本。我还没有测试过如果选择多个文件会发生什么。根据您的需要进行调整:
#Requires AutoHotkey v2.0-
#Warn
#SingleInstance
#HotIf WinActive("ahk_exe explorer.exe")
^q::DuplicateFile(GetSelectedFilePaths())
GetSelectedFilePaths() {
winClass := WinGetClass( "ahk_id" . hWnd := WinExist("A"))
if (winClass ~= "Progman|WorkerW|(Cabinet|Explore)WClass") {
shellWindows := ComObject("Shell.Application").Windows
if (winClass ~= "Progman|WorkerW")
shellFolderView := shellWindows.Item( ComObject(VT_UI4 := 0x13, SWC_DESKTOP := 0x8) ).Document
else {
for window in shellWindows
if (hWnd = window.HWND) && (shellFolderView := window.Document)
break
}
result := ""
for item in shellFolderView.SelectedItems
result .= (result = "" ? "" : "`n") . item.Path
if !result
result := shellFolderView.Folder.Self.Path
} else {
ClipSave := ClipboardAll
Clipboard := ""
SendInput "^c"
ClipWait 2
result := Clipboard
Clipboard := ClipSave
}
Return result
}
DuplicateFile(Source, Overwrite := false) {
SplitPath Source, &name, &dir, &ext, &name_no_ext, &drive
IB := InputBox("Please enter the new name:", "Duplicate file", "w200 h80", name_no_ext)
if IB.Result = "OK"
FileCopy Source, dir "\" IB.Value "." ext, Overwrite
}
我从以下网址获取了 explorer 脚本的代码AutoHotkey 论坛,但已将其改编为 v2。
虽然这不是问题,但还要注意,可以通过HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\NamingTemplates\CopyNameTemplate
在注册表中编辑 (String) 来更改默认重命名模板(即“-Copy”)。默认值为%s - Copy
,其中%s
是旧名称。这在以下部分中进行了描述这里。