単純なバッチファイルをPowerShellスクリプトとして作成するのに苦労しています。
このフォルダ構造を検討してください。クールが含まれているディレクトリに注意してください[1]
...
exiftool.exe
は、(たとえば)埋め込まれたMP3タグから画像を抽出するためのコマンドユーティリティです。さらに情報が必要な場合は
をアップロードしました。
oldscript.cmd
exiftool -picture -b input.mp3 > output.jpg
この行は、PowerShellで書き込む行です。著者からの フォーラム投稿で構文を見つけました
-picture
抽出するタグを-b
表し、バイナリモードを表しますinput.mp3
[や]のようなパスに特殊文字を含めることができる私のテストmp3です> output.jpg
名前を定義し、結果の画像を同じフォルダに保存します
newscript.ps1
私の現在の最高の機能しないコードは次のとおりです。
$ownpath = Split-Path $MyInvocation.MyCommand.Path
$exe = $ownpath + '\exiftool.exe'
$input = $ownpath + '\input.mp3'
$outimg = $ownpath + '\output.jpg'
& $exe -picture -binary $input| Set-Content -literalPath $outimg -encoding UTF8
Set-Content
「-literalpath」を介したパスで特殊文字を処理できるものを見つけました。ただし、Set-Content(およびOut-Fileメソッドも)は古いバッチパイピング( ">")とは動作が異なるように見えるため、バッチをPowershellスクリプトに変換することはできません。使用するエンコーディングに関係なく、結果の画像は表示されません。上記のヘルプファイルには、exiftoolがUTF8エンコーディングを使用していることが記載されています。
もちろん、他の利用可能なエンコーディングを試しましたが、それらすべてが表示可能な画像を生成できませんでした。私はこの時点で立ち往生しています。したがって、私の最初の質問は、「このバッチファイルをPowerShellに変換するにはどうすればよいですか」という部分がまだ残っています。
では、古いバッチコマンドを使用するとなぜ機能するのでしょうか。
例:フォルダ「D:folder」を作成し、カバー画像を含むこのMP3ファイルを配置します。上からexiftool.exe
を
ダウンロードし、そこにも配置します。
古いバッチコマンドが機能し、表示可能な画像が表示されます
D:\folder\exiftool -picture -binary D:\folder\input.mp3 > D:\folder\output.jpg
同じ構文の新しいPowershellV2スクリプトは失敗します。なんで?
& D:\folder\exiftool.exe -picture -binary D:\folder\input.mp3 > D:\folder\output.jpg