トップ回答者
「送る」で呼び出すPowerShellスクリプトで、ファイルパスがうまく受け取れない

質問
-
SendToに以下のショートカットを作って、渡されたファイルを扱いたいです。
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -noexit "C:\work\args.ps1"
エクスプローラで選んだファイルのフルパスに「空白」が含まれて無ければ、問題ないのですが
「C:\Program Files (x86)\misc\someone.txt」 みたいなファイルを渡そうとすると
以下のように表示されてスクリプトの処理に至らないようです。用語 'x86' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプロ
グラムの名前として認識されません。名前が正しく記述されていることを確認し、パス
が含まれている場合はそのパスが正しいことを確認してから、再試行してください。何か回避策、あるいはアイディアがあれば教えていただけませんか?
Inohara
回答
-
すみません、自己解決してしまいました。
SendToに作ったショートカットに「-f」を足して、以下のように修正したら、空白を含むファイル名を引き渡す事ができました。
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -noexit -f "C:\work\args.ps1"
お騒がせしました。
Inohara
- 回答としてマーク 牟田口大介Moderator 2013年4月10日 6:08
すべての返信
-
すみません、自己解決してしまいました。
SendToに作ったショートカットに「-f」を足して、以下のように修正したら、空白を含むファイル名を引き渡す事ができました。
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -noexit -f "C:\work\args.ps1"
お騒がせしました。
Inohara
- 回答としてマーク 牟田口大介Moderator 2013年4月10日 6:08
-
追記。
-f をつけてスクリプトを実行すると、スクリプトの中でまで空白が区切り文字として機能しなくなりました。
とりあえず、変数のスコープを拡げることで回避しましたが、もっとスマートな方法はないんですかねえ?# 以下、参考
# こういうスクリプトだと $filename1 が "c:\temp\moto.txt c:\temp\moto.zip"みたいになりました。
param(
[String]$sourcefilename
)function ZipFile
{
param([String]$filename1, $filename2)
if(test-path($filename1))
{
// $filename2 という名前のzipファイルを作って、$filename1を入れる処理
}
}$zipfilename = [System.IO.Path]::ChangeExtension($sourcefilename, ".zip")
ZipFile $sourcefilename $zipfilename
Inohara
-