« PowerShellの.PS1ファイルの関連付け(その3) | トップページ | PowerShellの.PS1ファイルを起動するバッチファイル(その2) »

2007年7月28日 (土)

PowerShellの.PS1ファイルを起動するバッチファイル(その1)

PowerShell外のコマンドラインで.PS1ファイルを起動するのは、
シンタクスが一般の慣行と異なるため、少々厄介です。
特に、引数に長いファイル名を指定する場合が困ります。
そこで、バッチファイルで普通のシンタクスから変換して起動します。

PS1.CMD PS1ファイル [引数...]

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET ARGS=%*
SET ARG1=%~1
IF "%ARG1:\=%"=="%ARG1%" SET ARGS=!ARGS:*%1="%~f1"!
ECHO ON
PowerShell.exe -command "& %ARGS:"='%"

PowerShell.exeのコマンドラインで空白区切りのエスケープは'です。
"は無視されるようです。なので、"を'に変換してます。

またPS1ファイル名はパス名の\を含む必要があります。
なので、\を含まないときはフルパスに変換してます。

« PowerShellの.PS1ファイルの関連付け(その3) | トップページ | PowerShellの.PS1ファイルを起動するバッチファイル(その2) »