フォルダ内にあるPNGファイルに対しOptiPNGで最適化を施します。※1
ls -LiteralPath "C:\Users\karet\Pictures" -Filter "*.png" | % { . "C:\Users\karet\tools\optipng.exe" $_.FullName }
ls
はGet-ChildItem
のAliasになります。ls
で画像ファイルの一覧を取得しています。フォルダを指定する場合
-LiteralPath
オプションを使います。Powershellで見つけられないファイル名の謎【Conv-ZIPtoPDF.ps1修正】
はじめにZIPファイルをPDFファイルに変換するスクリプトを実行していると、エクスプローラでは存在するファイルがPowershellで認識しないファイルがありました。どうやら""を含むファイルが見つけられないようです。ためしにファイルを作っ...
OptiPNGの対象はPNGファイルですので
-Filter
オプションで拡張子PNGのみをフィルタリングします。%
はForEach-Object
のAliasになります。|
のパイプラインで引き渡されたlsの結果に対し{}内の処理を繰り返します。PowerShell の foreach (ForEach-Object) の使い方
PowerShell では foreach が 2 種類あります。それぞれ特徴があるので、使い分けと使い方について紹介します。
. "C:\Users\karet\tools\optipng.exe"
は実行する外部コマンドoptipng.exeのパスを指定します。$_.FullName
はlsの結果のFileSystemObject
のプロパティで完全パスがセットされています。こちらをoptipng.exeの引数として処理を実行しています。optipng.exeのパスを指定する部分を別の外部コマンドへのパスに置き換えることでいろいろな処理に使える書式だと思います。
※1今回のサンプルの内容、OptiPNGでファイルを指定する引数がワイルドカードを受け入れ可能であれば(未確認)このような処理は必要ないです。実際このコマンドを利用したのは、Real-CUGANという高画質化AIツールで複数の画像ファイルを一括処理するためでした。pythonで書かれたツールなので、pythonのスクリプトに手を入れれば良いのですが(もしかすると一括処理機能があるかも。未確認)、せっかく正しく動くようセットアップしたツールが壊れることを恐れて、PowerShellから呼び出す今回の記事の方法で解決しました。
PowerShell外部コマンドを実行するサンプル
PowerShellスクリプトで外部コマンドを実行する方法としては「.」でコマンドを実行する方法と「Start-Processコマンドレット」を使う方法があります。細かな制御が出来るのはStart-Processコマンドレットなのですが、こ...
PowerShell外部コマンドを実行するサンプル2「yt-dlp.exe」
Webで公開されている動画をローカルに保存する「yt-dlp.exe」という外部コマンドがあります。類似のコマンドは色々ありますが、Webサイトの対応状況がとても優秀です。このコマンドをタスクスケジューラーを使い1日1回指定時間に実行し、複...
コメント