2006/06/23
ファイルのドラッグアンドドロップII
元記事はhttp://winscript.s41.xrea.com/mt/archives/2005/08/post_1.htmlです。
*.vbsファイルのように、ドロップしたファイルのパスをスクリプトに渡す方法を考えます。
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.ps1] @="ps1file" [HKEY_CLASSES_ROOT\ps1file] @="Windows PowerShell Script File" [HKEY_CLASSES_ROOT\ps1file\shell\open\command] @="\"C:\\Program Files\\Windows PowerShell\\v1.0\\powershell.exe\" -NoLogo \"%1\" %*" [HKEY_CLASSES_ROOT\ps1file\ShellEx\DropHandler] @="{60254CA5-953B-11CF-8C96-00AA00B8708C}"
のようなレジストリファイルをインポートします。すると、ファイルを*.ps1ファイルにドロップすると引数にドロップしたファイル名が渡るようになります。
例:
[void] [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") $args|foreach {[System.Windows.Forms.MessageBox]::Show($_) }
問題点は、半角スペースを含むパスの場合、半角スペースをスプリッタとして引数がバラバラに渡されてしまうことです。これは、バラバラになったパスを半角スペースで連結するなど、スクリプト側で対処する必要があると思われます。
その問題点を解消したスクリプトがこちら。
[void] [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") $paths=@() #空の配列をつくる。ドロップされたパスを格納 foreach ($arg in $args){ $temp += $arg if (test-path $temp) { $paths += $temp $temp = "" }else{ $temp += " " } } $paths|foreach{[System.Windows.Forms.MessageBox]::Show($_) }元記事:http://blogs.wankuma.com/mutaguchi/archive/2006/06/23/31196.aspx
プライバシーポリシー