ファイルのドラッグアンドドロップII - PowerShell Scripting Weblog

2006/06/23

元記事は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

トラックバック

トラックバックはまだありません

トラックバックPing:


コメント

コメントはまだありません


コメントをどうぞ

名前 (省略可) :
E-mail or URL (省略可) :


前の記事へ | 次の記事へ

Copyright © 2005-2016 Daisuke Mutaguchi All rights reserved

mailto: mutaguchi at roy.hi-ho.ne.jp

Awards

Books

Twitter