web-dev-qa-db-ja.com

ファイル名に一致するファイルを再帰的に削除する(PowerShellスクリプト)

私は古いバッチファイルをPowerShellスクリプトに変換してきましたが、かなりの成功を収めています。しかし...この場合、それを行うための最良かつ効率的な方法が何であるかを完全に理解することはできません。

バッチスクリプトは次のとおりです。

attrib -h -s *.* /s
del /s folder.jpg
del /s albumart*.jpg
del /s desktop.ini
@pause

基本的に、それは私の音楽フォルダとサブフォルダを通過し、そこにある可能性のあるすべてのジャンクを削除します(私はそれを私の音楽フォルダに持っています)。

このようなものは機能しますか(クイックテストの後、機能しませんでした...)?

$currentfolder = split-path -parent $MyInvocation.MyCommand.Definition
Get-ChildItem -Path $currentfolder -Include folder.jpg, albumart*.jpg, desktop.ini -File -Recurse | foreach { $_.Delete()}

削除されたファイル名をエコーするのもいいでしょう。

編集:私はここに完全に機能するソリューションを追加しています:

$currentfolder = split-path -parent $MyInvocation.MyCommand.Definition

Get-ChildItem -Path $currentfolder -Include folder.jpg, albumart*.jpg, desktop.ini -File -Recurse | foreach { echo "Deleting: $_" ; $_.Delete()}
5
Tup

2番目のスクリプトが機能する場合でも、これは理解しやすく、「より優れたPowerShell」で記述できます。

$currentfolder = Get-Location
Get-ChildItem -Path $currentfolder -File -Include folder.jpg,albumart*.jpg,desktop.ini -Recurse | Remove-Item -Force -Verbose

お役に立てれば !

7
Ob1lan