VBScript: 擬似フォルダの作成
機能要件
Windows のフォルダ(へのリンク)と同じような動作をするスクリプトを作成する。
引数によって実行時の挙動を変える。
引数なし(スクリプトをダブルクリックした時):
コード中に定義したフォルダをエクスプローラで開く。
引数あり(ファイル・フォルダをドラッグ&ドロップした時):
引数で指定されたパスのファイル・フォルダ全てを、コード中に定義したフォルダ配下へ移動する。
同名のファイル・フォルダが既に存在している場合は、エラーを通知し処理を中止する。
対象フォルダが存在しない場合はエラーを通知する。
コード
'// PseudoFolder.vbs kPath = "C:\Temp" ' Path to the folder kPathNotFound = &H004C Set fso = CreateObject("Scripting.FileSystemObject") If Not fso.FolderExists(kPath) Then Err.Raise kPathNotFound For Each arg In WScript.Arguments If fso.FileExists(arg) Then fso.MoveFile arg, kPath & "\" ElseIf fso.FolderExists(arg) Then If fso.GetDriveName(arg) = fso.GetDriveName(kPath) Then fso.MoveFolder arg, kPath & "\" Else fso.CopyFolder arg, kPath & "\", False fso.DeleteFolder arg, True End If Else Err.Raise kPathNotFound End If Next If 0 = WScript.Arguments.Count Then CreateObject("Shell.Application").Open kPath
概要
このスクリプトに対するショートカットを作り、フォルダのイメージをアイコンに設定すれば、まさに擬似的なフォルダとして機能するだろう。
普通のショートカットと比べると以下のような利点がある。
・フォルダのパスを動的に定義できる
・ドライブの違いを意識せず、ドラッグ&ドロップで確実に移動処理を行える
(エクスプローラでは同一ドライブなら移動、異なるドライブならコピーが行われる)
留意事項
・異なるドライブ間で Scripting.FileSystemObject.MoveFolder を行うと失敗する。
(内部的にはリネームと同じ処理らしい?)
面倒ではあるが、Scripting.FileSystemObject.GetDriveName でチェックしてドライブが異なっていたら
コピーと削除を分けて行わないといけない。
・フォルダの開き方は、WScript.Shell.Run よりも Shell.Application.Open のほうが安全かと思う。
・各メソッドのおさらい。
object.MoveFile ( source, destination );
⇒ destination をバックスラッシュで終わらせることで、明示的にフォルダと認識させる。
同名ファイルが存在する場合はエラーとなる。
object.MoveFolder ( source, destination );
⇒ destination をバックスラッシュで終わらせることで、明示的に既存フォルダと認識させる。
同名のファイルやフォルダが存在する場合はエラーとなる。
object.CopyFolder ( source, destination[, overwrite] );
⇒ destination をバックスラッシュで終わらせることで、明示的に既存フォルダと認識させる。
上書きを抑止するため、第3引数に False を与える。
object.DeleteFolder ( folderspec[, force] );
⇒ 読み取り専用フォルダも削除するため、第2引数に True を与える。
http://msdn.microsoft.com/ja-jp/library/cc428039.aspx
http://msdn.microsoft.com/ja-jp/library/cc428108.aspx
http://msdn.microsoft.com/ja-jp/library/cc427986.aspx
http://msdn.microsoft.com/ja-jp/library/cc427996.aspx
・フォルダ存在チェックで Raise させているのは 0x4c (10進数では76) Path not found。
エラーコードの一覧は以下を参照。
http://www.csidata.com/custserv/onlinehelp/vbsdocs/vbs241.htm
0 件のコメント:
コメントを投稿