2011-02-02 9 views
4

現在の日付と時刻を使用して新しいフォルダの名前を付けることがよくあります。これを行うプログラムを作成しました(つまり、1つの引数をとり、現在の日時と引数について)。Windowsエクスプローラのコンテキストメニューにカスタムの「新しいフォルダ」を追加する

Windowsエクスプローラのコンテキストメニュー(「新しいフォルダ」のすぐ下)に「新しいDateTimeフォルダ」が表示され、日付と時刻が自動的に追加されるようにする方法が不思議でしたユーザーが名前を入力できるようにします。実際には、 "New Folder"というデフォルトの名前の代わりに、 "DateTime"でなければならないという点を除いて、標準の "New Folder"によく似ています。

アイデア?ありがとう。

答えて

0

シェル拡張、特にコンテキストメニューを実装する必要があります。 Hereはそれを行う方法に関するかなり良いウォークスルーです。 MSDN here(特にコンテキストメニュー用)とhere(一般的なシェル拡張用)には、いくつかの下位レベルのドキュメントもあります。あなたの特定のケースでは、あなたはregisterあなたが "Directory \ Background"キーの下にシェル拡張を行うと思います。

7

ちょっと遊んだ後、レジストリを編集するだけで、基本バージョンを追加する方法を見つけました。これは、名前の入力を要求していません(それはちょうど基本的なDD.MM.YYYY HHを使用し、MM、SS形式)と、エクスプローラの名前変更モードに入りません。

Explorer New menu

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の、それはハックのビットですwscript.exe //nologo "C:\path\to\NewDateDir.wsf" "%1"にコマンドを変更し、あなたがで終わるNewDateDir.wsfに次のコードを保存することにより

(私は、新しいメニュー項目が表示されるまでのために偽のShell\open\commandキーを追加する必要がありました)これは:

Explorer New menu and WSH script

<?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> 

あなたが部分的に選択したい場合は特に、私は活性化探検モードがハードになるだろうと思います名前を変更シェル拡張を書くことにした場合であっても。あなたはまた、他のプログラムがシェルのコンテキストメニューを実装するかもしれないので、ドキュメント化されていないあらゆる種類のエクスプローラを使うことができないことを覚えておく必要があります。

+0

素晴らしいですね!ありがとう! – lejon

+2

ハックのビットですが、まだかなり印象的です。ニース。 – Luke

+0

+1努力のために。いいよ! – chacham15

関連する問題