web-dev-qa-db-ja.com

Windowsエクスプローラー(Windows 10)で特殊文字を含むファイル名を検索しようとしています

非常に迷惑な人のミスにより、何千もの私のファイルが、しばしば複数回コピーされました。これにより、filename(2)、filename(3)などの名前の何千ものファイルが作成されました。

私の賢明なアイデアは、(2)を検索してすべての結果を削除することでしたが、検索では、ファイル名に2が含まれるすべてのファイルが、括弧を含めずに表示され続けます。

他の場所で解決策を探した後、name:〜=(2)、 "(2)"、さらには "(2)" "(2)"を試しました。それらのどれも機能しませんでした。ファイル名に2が含まれているファイルを除外したいのですが、角かっこ内に2が含まれているファイルのみが必要です。

誰か助けてもらえますか?

2
Sia

角かっこ内に2つあるファイルのみが必要です(2)

次の検索式を使用します。

name:~"*(2)*"

ノート:

  • ~はリテラル文字列インジケータであり、以下はファイル名全体と一致する必要があります

  • ニーズによっては、filename:の方がname:よりも優れている場合があります

前:

enter image description here

後:

enter image description here


参考文献

4
DavidPostill

次のようなPowerShellスクリプトをお勧めします。

  • 指定された開始フォルダーについて、BaseNameの末尾に(1)が付いているすべてのファイルを再帰的に検索します。
  • 番号のないdirを実行して、考えられるすべての重複を検索し、ハッシュを作成して正確なコピーのみを削除し、確認を求めます。
  • その間にファイルが変更された場合、これらは正確なコピーではなくなり、失敗します。

開始フォルダに合わせて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
0
LotPings