前提・実現したいこと
Qiitaにいい記事があったのですが、何をやっているのか分からないので困っています。
バッチファイルから PowerShell を呼び出す方法という記事のコードなのですが
batch
1@powershell -NoProfile -ExecutionPolicy Unrestricted "$s=[scriptblock]::create((gc \"%~f0\"|?{$_.readcount -gt 1})-join\"`n\");&$s" %*&goto:eof 2 3Write-Host "Hello, World!!"
やってることは、両方ともバッチファイルの中で自分自身を呼び出して、その呼び出す記述を呼び出す側で無視するという感じ。
わかりません・・・。
わかること
@
でコマンドプロンプトに一行目のコードを出力させないようにしているpowershell -NoProfile -ExecutionPolicy Unrestricted
は余計な設定を読み込まず、実行時ポリシーを無視して無理やり実行させるのに必要$s=[scriptblock]::create()
変数sに@scriptblock
型Objectを生成して代入;
はVBでいう_
とかC系言語(?)でいう;
と同じgc \"%~f0\"
でカレントディレクトリのファイルやフォルダのリストを取得してパイプで右側に結果を渡している
わからないこと
?{$_.readcount -gt 1}
予測もつきません・・・どういう構文で、何をしているのでしょう
-join\"`n\"
の部分は文字列のオプションとしてjoin
があり、続く文字列をつけ足してくれているのでしょうか
&$s
は全然わかりません。この時点では変数sは宣言されていないと思うのですが・・・
%*&goto:eof
も全然わかりません。どこで区切れるのかすら分かりません。
というか""
の外側なので別の引数なのでしょうか。パラメーターか何か?
Write-Host "Hello, World!!"
どうしてそんなところにPowerShellのコマンドレットが・・・。
どうぞよろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
- Windows 10 64bit
回答2件
あなたの回答
tips
プレビュー