目的:
List.txt ファイルにリストされていないフォルダー内のオーディオ ファイルを削除する
List.txt を読み取ってオーディオ フォルダー内のファイルと比較し、リストに含まれていないファイルを削除します。
List.txtの内容:
05 - Earth Wind and Fire - September (The Reflex Revision).mp3
Electric Light Orchestra - Last Train To London (Bootleg Extended Dance Remix).flac
120 - Kool & The Gang - Get Down On It (Soul Funk House Remix).wav
$files = "C:\Users\$env:username\Desktop\Logs_LUFS\List Audio Files for Normalization.txt"
$location = "C:\Users\$env:username\Desktop\LUFS Audios\"
Get-Content $files | % {
$result = Get-ChildItem -Recurse "$location*$_*"
If(!$result) {
Remove-Item $location* $result.Fullname
}
}
削除コマンドでは、次のメッセージが表示されます。
Cannot bind argument to 'Path' parameter because it is null
!$Result
値が trueの場合にオーディオ フォルダーからファイルを削除するコマンドは何ですか ?
答え1
PowerShell: リスト内のファイルを除くすべてのファイルを削除する
以下は、説明されているようにこのタスクに機能する 2 つの PowerShell バリエーションです。提供された詳細に基づいて、私の側で可能な限りエミュレートして確認しました。
パワーシェル 1
$files = Get-Content "C:\Users\$env:username\Desktop\Logs_LUFS\List Audio Files for Normalization.txt";
$location = "C:\Users\$env:username\Desktop\LUFS Audios\";
Get-ChildItem -Recurse $location -File -Exclude $files | Remove-Item;
パワーシェル2
$files = Get-Content "C:\Users\$env:username\Desktop\Logs_LUFS\List Audio Files for Normalization.txt";
$location = "C:\Users\$env:username\Desktop\LUFS Audios\";
Get-ChildItem -Recurse $location -File | %{
If($_.Name -notin $files ){ Remove-Item -LiteralPath $_.FullName -Force; };
};
サポートリソース
-
-notin
- 値がコレクション内にありません -
標準エイリアスForeach-Objectの場合: '
%
' 記号、ForEach