我经常使用当前日期和时间来命名新文件夹,并且我制作了一个程序来执行此操作(即它接受一个参数,然后根据当前日期和时间以及该参数创建一个新文件夹)。
我想知道如何做到这一点,以便在 Windows 资源管理器的上下文菜单中显示一个“新日期时间文件夹”(就在“新文件夹”下方),并且它会自动在前面添加日期和时间并允许用户输入名称。它实际上很像标准的“新文件夹”,除了默认名称不是“新文件夹”,它应该是“日期时间”,并且默认情况下不应标记文本。
有任何想法吗?谢谢。
最佳答案
在玩了一会儿之后,我想出了一种方法,只需编辑注册表即可添加基本版本。它不提示输入名称(它只使用基本的 DD.MM.YYYY HH;MM;SS 格式)并且不进入资源管理器重命名模式:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\.NewDirectoryBasedOnDate]
@="NewDirectoryBasedOnDate"
[HKEY_CURRENT_USER\Software\Classes\.NewDirectoryBasedOnDate\ShellNew]
"Command"="\"CMD\" /D /E:ON /c for /F \"tokens=1-9 delims=.,\\:/\" %%A IN (\"%%date%%.%%time%%\") DO for /F \"tokens=*\" %%a IN (\"%1\") do md \"%%~dpa\\%%A.%%B.%%C %%D;%%E;%%F\""
"nullfile"=hex:
[HKEY_CURRENT_USER\Software\Classes\NewDirectoryBasedOnDate]
"FriendlyTypeName"="Directory Based On Date"
[HKEY_CURRENT_USER\Software\Classes\NewDirectoryBasedOnDate\DefaultIcon]
@="shell32.dll,3"
[HKEY_CURRENT_USER\Software\Classes\NewDirectoryBasedOnDate\Shell\open]
"LegacyDisable"=hex:
[HKEY_CURRENT_USER\Software\Classes\NewDirectoryBasedOnDate\Shell\open\command]
@="."
我只在 WinXP 上测试过,这有点小技巧(我必须添加假的
Shell\open\command
键才能显示新菜单项)通过将命令更改为
wscript.exe //nologo "C:\path\to\NewDateDir.wsf" "%1"
并将以下代码保存在 NewDateDir.wsf 中,您最终会得到以下代码:<?xml version="1.0" ?><job><script language="VBScript"><![CDATA[
if WScript.Arguments.Count < 1 then
MsgBox("Bad parameter!")
WScript.Quit(1)
end if
Set FSO=CreateObject("Scripting.FileSystemObject")
Function StrFilter(s,ch,rep)
StrFilter=Join(Split(s,ch,-1),rep)
End Function
basedir=FSO.GetParentFolderName(WScript.Arguments(0))
defname=Date&" "&Time
defname=StrFilter(defname,"/",".")
defname=StrFilter(defname,":",";")
name=InputBox("New folder in "&basedir,"New folder",defname)
if not IsEmpty(name) and Len(name) > 0 then
FSO.CreateFolder(FSO.BuildPath(basedir,name))
end if
]]></script></job>
即使您决定编写一个 shell 扩展,我认为激活资源管理器重命名模式也会很困难,特别是如果您想要部分选择。您还必须记住,其他程序可能会实现 shell 上下文菜单,因此您不能使用各种未记录的资源管理器内容。
关于windows - 将自定义 "new folder"添加到 Windows 资源管理器上下文菜单,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4872786/