非常に迷惑な人のミスにより、何千もの私のファイルが、しばしば複数回コピーされました。これにより、filename(2)、filename(3)などの名前の何千ものファイルが作成されました。
私の賢明なアイデアは、(2)を検索してすべての結果を削除することでしたが、検索では、ファイル名に2が含まれるすべてのファイルが、括弧を含めずに表示され続けます。
他の場所で解決策を探した後、name:〜=(2)、 "(2)"、さらには "(2)" "(2)"を試しました。それらのどれも機能しませんでした。ファイル名に2が含まれているファイルを除外したいのですが、角かっこ内に2が含まれているファイルのみが必要です。
誰か助けてもらえますか?
(2)
次の検索式を使用します。
name:~"*(2)*"
ノート:
~
はリテラル文字列インジケータであり、以下はファイル名全体と一致する必要があります
ニーズによっては、filename:
の方がname:
よりも優れている場合があります
前:
後:
次のようなPowerShellスクリプトをお勧めします。
(1)
が付いているすべてのファイルを再帰的に検索します。開始フォルダに合わせてPush-Location
を変更し、拡張子.ps1
でファイルを保存して実行します。
## Q:\Test\2017\07\15\SU_1230033.ps1
## inspired by http://n3wjack.net/2015/04/06/find-and-delete-duplicate-files-with-just-powershell/
Push-Location "D:\"
Get-ChildItem "* (1).*" -Recurse -File | ForEach-Object {
$BaseFile = (Join-Path $_.Directory ($_.BaseName -replace ' ?\(\d+\)'))+"*$($_.Extension)"
Get-ChildItem $BaseFile | Get-FileHash | Group-Object Hash | Where { $_.Count -gt 1 } |
ForEach-Object {$_.Group | Select-Object -Skip 1 } | Remove-Item -Confirm
}
PopD
ファイルのディレクトリリストだけを取得するには、次の縮小スクリプトを使用します。
Push-Location "D:\"
Get-ChildItem "* (1).*" -Recurse -File | ForEach-Object {
$BaseFile = (Join-Path $_.Directory ($_.BaseName -replace ' ?\(\d+\)'))+"*$($_.Extension)"
Get-ChildItem $BaseFile
}
PopD