以前の記事 で書いた実行演算子 &
でファイルを実行しようとしたとき、思いつくまま下記のようにパラメータを指定したらエラーになりました。
# これはエラー
& "C:\Users\my script folder\mytool.exe --param hoge"
解決策
引用符の外側に書いてやればよかったようです。
& "C:\Users\my script folder\mytool.exe" --param "hoge"
変数を渡すこともできます。
& "C:\Users\my script folder\mytool.exe" --param $fuga
パラメータ名部分は文字列として指定することもできました。
& "C:\Users\my script folder\mytool.exe" "--param" $fuga
実行ファイル名までが演算子の対象なのかと思って括弧でくくってみたらエラー。
&
はそれ以降の文全体を対象にしているようです。
# これはエラー
(& "C:\Users\my script folder\mytool.exe") "--param" $fuga
パラメータは配列として渡すこともできるようです。
& "C:\Users\my script folder\mytool.exe" @("--param",$fuga)
なお、配列として扱う場合はパラメータ名も文字列とする必要があるようです(引用符を外したらエラーになりました)。
# これはエラー
& "C:\Users\my script folder\mytool.exe" @(--param, $fuga)
@
を省略してもいい模様。
& "C:\Users\my script folder\mytool.exe" ("--param",$fuga)
でも流石に括弧まで外すとエラーになりました。
# これはエラー
& "C:\Users\my script folder\mytool.exe" "--param",$fuga
パラメータが複数ある場合も基本的には同じようなのですが……
& "C:\Users\my script folder\mytool.exe" --param1 $foo --param2 $baa
& "C:\Users\my script folder\mytool.exe" "--param1" $foo "--param2" $baa
& "C:\Users\my script folder\mytool.exe" ("--param1",$foo) ("--param2",$baa)
配列でパラメータ名と値を結びつけているのかな、と思ったら少し違うようです。配列を展開して順に渡しているのでしょうか🤔。
# これはエラー
& "C:\Users\my script folder\mytool.exe" ("--param1",$foo),("--param2",$baa)
# これはエラーにならない
& "C:\Users\my script folder\mytool.exe" ("--param1",$foo,"--param2",$baa)
変数を渡すのでなければ stop-parsing symbol (パース終了シンボル?)の --%
を使えばいいようです。
& "C:\Users\my script folder\mytool.exe" --% --param hoge