2012-09-06 8 views
5

me gustaría para seleccionar una lista de archivos que utilizan Get-ChildItem hilo a Rename-Item y tienen el texto de la pantalla de salida con cada línea que muestra algo así como "Renombrado OldFileName a newfilename".En PowerShell, ¿cómo puedo usar Rename-Item para generar los nombres de archivos nuevos y viejos al mismo tiempo?

¿Cómo puedo hacer esto?

+1

estoy un poco de un ignorante PowerShell, así que estoy un forcejeo pequeño. He jugado con Tee-Object y -outvariable y -passthru, pero para ser sincero, realmente no sé lo que estoy haciendo y parece que debería ser algo fácil de hacer. –

Respuesta

7
Get-Childitem C:\Temp | 
    Foreach-object { 
     $OldName = $_.name; 
     $NewName = $_.name -replace 'temp','test'; 
     Rename-Item -Newname $NewName; 
     Write-Output $("Renamed {0} to {1}" -f $OldName,$NewName) 
     } 
+1

Este me parece muy legible. –

6

Una solución simple es ejecutar rename-item con -WhatIf. Esto mostrará algo así como

PS H:\test> gci | rename-item -newname { $_.name -replace 'temp','test' } -WhatIf 
What if: Performing operation "Rename File" on Target "Item: H:\test\temp1 Destination: H:\test\test1". 

Lo suficientemente bueno, o ¿lo necesita para hacerlo mientras realiza la operación?

EDIT: Una solución aún más simple, use -Verbose. Hace lo mismo que el -WhatIf, sino también realizar la operación :)

+0

Gracias por esto, me gustaría obtener un buen formato en la salida si es posible. Verbose y qué pasa si el trabajo pero el resultado no es muy legible. Voy a votar esta vez sin embargo. –

4

Usted puede hacerlo de esta manera:

gci . | %{ rename-item -Path $_.fullname -NewName ($_.name + 1); Write-Host "Renamed $($_.fullname) to $($_.name + 1)"} 
Cuestiones relacionadas