2007/09/08

オプションを付けない場合は、

& 'C:\Program Files\Internet Explorer\iexplore.exe'

など、&演算子を使えばいいのですが、これにオプションを付ける方法が謎です。

以下、ダメな例。

& 'C:\Program Files\Internet Explorer\iexplore.exe -k'

& '""C:\Program Files\Internet Explorer\iexplore.exe"" -k'

ぱっと思いつく回避方法。

 [diagnostics.process]::start('C:\Program Files\Internet Explorer\iexplore.exe',' -k')

追記。正解のコメントをいただいたのでここにも書いておきます。

& 'C:\Program Files\Internet Explorer\iexplore.exe' -k

`を使って半角スペースをエスケープするのでもOKです。

C:\Program` Files\Internet` Explorer\iexplore.exe -k

元記事:http://blogs.wankuma.com/mutaguchi/archive/2007/09/10/95093.aspx

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


Copyright © 2005-2018 Daisuke Mutaguchi All rights reserved
mailto: mutaguchi at roy.hi-ho.ne.jp
プライバシーポリシー

Twitter

Books