2011-05-06 8 views
10
Function Move { 
    #Moves all files older than 31 days old from the Source folder to the Target 
    Get-Childitem -Path "E:\source" | Where-Object { $_.LastWriteTime -lt (get-date).AddDays(-31)} | 
    ForEach { 
    Move-Item $_.FullName -destination "F:\target" -force -ErrorAction:SilentlyContinue 
    } 
} 

en el directorio fuente son archivos que tienen más de 2-3 años, pero cuando ejecuto el script, nada se mueve al directorio de destino?! ¿Qué pasa?Mover archivos anteriores a 31 días a otra unidad

+0

Si saca el ErrorAction ¿produce algún error? –

+0

¿Están sus archivos en 'E: \ source' exactamente o en sus subdirectorios? En este último caso, use 'Get-Childitem -Recurse' –

+1

FYI, que no moverá los archivos en los subdirectorios. – JasonMArcher

Respuesta

16

No sé si esto hace una gran diferencia, pero en lugar de $. necesita ser $ _.

yo probamos este guión y me da buenos resultados:

get-childitem -Path "E:\source" | 
    where-object {$_.LastWriteTime -lt (get-date).AddDays(-31)} | 
    move-item -destination "F:\target" 

Aviso que no es necesario un bucle foreach porque los objetos serán "hilo" en el comando ítems movimiento

+0

get-currentitem ¿te refieres a Get-Childitem? – JPBlanc

+0

por qué no funciona para mí ... muy extraño. Pensé en el foreach para evitar problemas, porque tenemos 20k + archivos en algunos directores .... –

+0

¿tienes alguna idea? –

4

también tenga cuidado con los archivos ocultos, intente agregar -Force a Get-ChildItem

Cuestiones relacionadas