PowerShell 1.0 - Cambiar el nombre de archivos falla cuando la escritura se encuentra en un directorio diferente
-
28-09-2019 - |
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
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