Ciao Bonna,
la complessità della tua richiesta deriva dal fatto che il confronto tra i file che provengono dalle due catelle dovrebbe avvenire in base al percorso relativo (xyz.ext, folder\abc.def) e non in base al percorso assoluto (a meno che tu non stia confrontando i file di due dischi con la stessa lettera e con la stessa struttura di directory, in due macchine differenti).
Detto questo, ho creato per te una funzione di recupero dei file da confrontare che aggiunge a ciascun elemento una proprietà che ne identifica il percorso relativo, dato il path root. Il confronto vero e proprio tra i due set di file avviene invece per mezzo del cmdlet Compare-Object (diff, per gli amici), che agendo sulla proprietà sopra menzionata ritorna solo i file da rinominare.
Ecco il codice completo (sostituisci i percorsi c:\temp\a c:\temp\b con i tuoi):
function Get-CompareFiles($path)
{
# Recupera i file dal percorso indicato ed aggiunge una proprietà con il path
# relativo a ciascun oggetto
Get-ChildItem -Recurse $path |
Where-Object { -not $_.PSIsContainer } |
ForEach-Object {
$_ | Add-Member -MemberType NoteProperty -Name RelativePath -Value ($_.FullName.SubString($path.Length + 1)) -Passthru
}
}
# Recupera i file dai due percorsi e li confronta in base al path relativo, considera
# solo quelli uguali e li rinomina.
$path1 = 'c:\temp\a'
$path2 = 'c:\temp\b'
Compare-Object (Get-CompareFiles $path1) (Get-CompareFiles $path2) -Property RelativePath -IncludeEqual -ExcludeDifferent |
ForEach-Object {
$fileToRename = [IO.Path]::Combine($path2, $_.RelativePath)
$newName = $fileToRename + '.old'
Rename-Item $fileToRename $newName -WhatIf
}
Ciao, a presto!