Mover arquivos do tipo de vários diretórios para um único diretório

0

Eu tive uma grande falha no HDD e recuperei os arquivos, mas eles estão espalhados por mais de 500 DIRs em uma ordem completamente aleatória, sem datas

Preciso mover 10.000 jpgs de 500 DIRs para um DIR, para poder visualizar e classificar manualmente cada arquivo. Idealmente, eu preciso ignorar dupes (mas não perdê-los, no caso de serem, na verdade, arquivos diferentes).

O Windows 8 acaba quando eu tento fazer isso por meio da pesquisa na área de trabalho.

Quais comandos do DOS eu devo usar para isso?

    
por RatherBeMaking 08.01.2017 / 14:33

3 respostas

1

Semelhante à minha outra resposta, este script do PowerShell reunirá todos os arquivos em uma pasta, incrementando count (x) com os mesmos nomes.

$BaseDir = 'Q:\Test16\'
$Dest    = 'Q:\Test\jpg\'
$Ext     = '.jpg'
$RegEx   = "^(?<Name>.*?) \((?<Cnt>\d+)\)(?<Ext>$([regex]::escape($Ext)))$"

Set-Location $BaseDir

Get-ChildItem -Filter "*$Ext" -File -Recurse | ForEach-Object {
    $NewName = "$Dest$($_.Name)"
    while (Test-Path $NewName){
        If ($NewName -match $RegEx){
            $Cnt = [int]$matches.Cnt +1
            $NewName = "$($matches.Name) ($Cnt)$Ext"
        } Else {
            $NewName = "$Dest$($_.BaseName) (1)$Ext"
        }
    }
    $_|Move-Item -Destination $NewName
}
    
por 09.01.2017 / 02:01
0

Eu instalaria a Pesquisa Tudo - link . Isso deve começar com você.

    
por 08.01.2017 / 15:59
0

Eu não sei como seus nomes de arquivos jpg se parecem, mas pode ser uma escolha melhor para ver se há alguma marca nos arquivos para renomeá-los com data, localização qualquer.

Para copiar / mover para uma única pasta simples, esse lote pode ajudá-lo.
Edite as vars BaseDir e Dest para se adequar ao seu ambiente.
Os arquivos são verificados com fc.exe se eles são duplicatas reais, caso em que eles não são movidos.
Se diferente, um explorador como o número entre parênteses (1) é anexado.
Para que isso aconteça em uma extensão diferente, o var Ext pode ser adaptado de acordo.

@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
Set "BaseDir=Q:\Test16\"
Set "Dest=Q:\Test\jpg\"
Set "Ext=.jpg"

Pushd "%BaseDir%"
For /f "delims=" %%A in ('Dir /B /S /A-D *%Ext% 2>Nul' 
) Do If Not Exist "%Dest%%%~nxA" (
  Move "%%~fA" "%Dest%" >Nul
) Else (
  Set Cnt=1
  Call :MoveInc "%%A" "%Dest%%%~nxA"
)
PopD
Goto :EOF

:MoveInc
:: Check if file is a duplicate
Fc.exe /B %1 %2 >Nul 2>&1 && (Echo %1 is a duplicate of %2 &Goto :Eof)
:: Check if name already has (x) appended
Set BaseName=%~n1
Echo %BaseName%|Findstr "([0-9][0-9]*)$" 1>NUL 2>&1 || Goto :Next
:: Get already present number, since " (1)" is at least 4 chars
Set Last=-4

:Again
Echo:!BaseName:~%Last%!|Find " (">NUL||(Set /A Last-=1&Goto :Again) 
Set "BaseName=!BaseName:~0,%Last%!"
Set /A Cnt=!BaseName:~%Last%! +1

:Next
Set "NewName=%Dest%%BaseName% (%Cnt%)%~x1"
If Exist "%NewName%" (Set /A Cnt+=1 & Goto :Next)
Move %1 "%NewName%" >Nul
Goto :Eof
    
por 08.01.2017 / 22:17