PowerShell 1.0 - Cambiar el nombre de archivos falla cuando la escritura se encuentra en un directorio diferente

StackOverflow https://stackoverflow.com/questions/3072432

Pregunta

Estoy tratando de antiguos archivos de registro de cambio de nombre por lotes, pero el guión sólo funciona para mí cuando la secuencia de comandos se almacena en la misma carpeta que los archivos de registro. Aquí está el código:

cls
$file = gci E:\logs |? {$_.extension -eq ".log" |% {rename-item $_ ($_.Name + ".old")}

Al ejecutar este script desde E:\logs, funciona muy bien. Sin embargo, cuando corro esta secuencia de comandos de C: \ Scripts, me da este error:

Rename-Item: Cannot rename because item at 'my.log.file.log' does not exist.
At C:\Scripts\rename-script.ps1:2 char:92
+ $file = gci E:\logs |? {$_.extension -eq ".log" |% {rename-item $_ ($_.Name + ".old")}
    + CategoryInfo          : InvalidOperation (:) [Rename-Item], FSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand

También intentado usar el comando Move-Item con el interruptor -literalpath pero tuvo el mismo resultado

¿Fue útil?

Solución

La propiedad Name le da sólo el nombre del archivo sin la ruta. Es posible que desee utilizar la propiedad NombreCompleto lugar. También puede simplificar esto desde Rename-Item acepta entradas de canalización para el nombre del archivo fuente:

gci E:\logs *.log | rename-item -newname {$_.FullName + ".old"}

Tenga en cuenta también que GCI (get-childitem) le permite filtrar los elementos que salidas usando el parmater -Filter. Este parámetro es un parámetro de posición (2) por lo que ni siquiera tiene que especificar el nombre del parámetro.

Otros consejos

Parece que no está resultando, ya que no está en la ruta de dos.

viperjay

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top