Tentando pesquisar nomes de arquivos com caracteres especiais no Windows Explorer (Windows 10)

2

Através do erro de uma pessoa muito chata, milhares de arquivos foram copiados, muitas vezes várias vezes. Isso resultou em milhares de arquivos nomeados filename (2), filename (3), etc.

Minha brilhante idéia era fazer uma pesquisa por (2) e excluir todos os resultados, mas a pesquisa continua exibindo todos os arquivos que têm o número 2 no nome do arquivo, em vez de incluir os colchetes.

Eu tentei o nome: ~ = (2), "(2)" e até "(2)" "(2)" depois de procurar soluções em outro lugar. Nenhum deles funcionou. Eu quero excluir arquivos que só tem um 2 no nome do arquivo, eu só quero os arquivos que têm os dois dentro dos colchetes.

Alguém pode ajudar, por favor?

    
por Sia 15.07.2017 / 01:34

2 respostas

3

Eu só quero os arquivos que possuem os dois dentro dos parênteses (2)

Use a seguinte expressão de pesquisa:

name:~"*(2)*"

Notas:

  • ~ é o indicador de string literal e o que segue deve corresponder ao nome do arquivo inteiro

  • Dependendo de suas necessidades, filename: pode ser melhor que name:

Antes:

Depois:

LeituraAdicional

por 15.07.2017 / 14:26
0

Sugiro um script do PowerShell que:

  • localiza todos os arquivos com um (1) à direita para o BaseName recursivamente por um dado pasta inicial.
  • Faz um diretório sem o número para localizar todos os possíveis dupes e, em seguida, cria um hash para excluir apenas cópias exatas, solicitando confirmação.
  • Se os arquivos forem alterados nesse meio tempo, não haverá mais cópias exatas e serão eliminados.

Altere o Push-Location para ajustar sua pasta inicial, salve o arquivo com a extensão .ps1 e execute-o.

## Q:\Test17\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

Para obter apenas uma listagem dos arquivos, use este script reduzido:

Push-Location "D:\"
Get-ChildItem "* (1).*" -Recurse -File | ForEach-Object {
    $BaseFile = (Join-Path $_.Directory ($_.BaseName -replace ' ?\(\d+\)'))+"*$($_.Extension)"
    Get-ChildItem $BaseFile 
}
PopD
    
por 15.07.2017 / 03:28