Powershell Rename-Item se repite si la cantidad de archivos es grande

Powershell Rename-Item se repite si la cantidad de archivos es grande

(Voy a publicar todos los caminos aquí. Se siente incómodamente íntimo, pero ¿qué daño podría hacer, verdad?)

Aquí está mi símbolo del sistema de PowerShell:

PS D:\Local generations\Tlungvel> ls | Rename-Item -NewName {"TlungvelSolar " + $_.Name}
Rename-Item : Could not find a part of the path.
At line:1 char:6
+ ls | Rename-Item -NewName {"TlungvelSolar " + $_.Name}
+      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (D:\Local genera..._02.07.2021.xls:String) [Rename-Item], DirectoryNotFoundException
    + FullyQualifiedErrorId : RenameItemIOError,Microsoft.PowerShell.Commands.RenameItemCommand

Rename-Item : Could not find a part of the path.
At line:1 char:6
+ ls | Rename-Item -NewName {"TlungvelSolar " + $_.Name}
+      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (D:\Local genera..._23.07.2021.xls:String) [Rename-Item], DirectoryNotFoundException
    + FullyQualifiedErrorId : RenameItemIOError,Microsoft.PowerShell.Commands.RenameItemCommand

... y así sucesivamente para cada archivo del directorio.

El comando parece bastante simple incluso para un usuario avanzado principiante como yo ("ls | Rename-Item -NewName {"TlungvelSolar " + $_.Name}") y funciona bien si la cantidad de archivos en el directorio es pequeña. Pero si la cantidad de archivos alcanza un cierto umbral, el proceso simplemente se repite indefinidamente y arroja el error anterior para cada archivo.

Por ejemplo, uno de los nombres de archivo es "Power_Drawal_from_23.07.2021___24.07.2021"

Si el recuento de archivos cruza 22 (para este nombre de archivo), se le cambia el nombre a "TlungvelSolar TlungvelSolar TlungvelSolar TlungvelSolar TlungvelSolar TlungvelSolar TlungvelSolar TlungvelSolar TlungvelSolar TlungvelSolar TlungvelSolar TlungvelSolar TlungvelSolar Power_Drawal_from_23.07.2021___24. 07.2021" (el número de repeticiones está limitado por el máximo de 256 de Windows límite de ruta de archivo de caracteres).

Ahora quiero que le cambie el nombre a "TlungvelSolar Power_Drawal_from_23.07.2021___24.07.2021"

Nuevamente, funciona bien si la cantidad de archivos es menor y también parece depender de los nombres de los archivos.

Respuesta1

su problema se debe a que introduce elementos en la tuberíamientras cambia la fuente.[sonrisa] eso hace que sea bastante fácil volver a procesar el mismo elemento: PARECE un elemento diferente según el código.

la solución es algo así como una de las siguientes soluciones...

  • toma todos los elementos en un $Var y aliméntaloColección completaen la tubería
  • envuelva la G-CIllamada entre padres para forzar la llamada a tomar todouna vez
  • usar un foreachbucle

Prefiero el tercero, ya que ofrece un conjunto de pasos mucho más simple y obvio... y, por lo tanto, más fácil de depurar. [sonrisa]

información relacionada