Rename-Item повторяется, если количество файлов велико

Rename-Item повторяется, если количество файлов велико
Rename-Item повторяется, если количество файлов велико - marluc01 @ Unsplash

(Я просто собираюсь опубликовать здесь каждый путь. Это кажется неудобным, но какой от этого может быть вред, верно?)

Вот моя командная строка 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

... и так далее для каждого файла в каталоге.

Команда кажется достаточно простой даже для такого начинающего пользователя, как я ("ls | Rename-Item -NewName {"TlungvelSolar " + $_.Name}"), и она отлично работает, если количество файлов в каталоге невелико. Но если количество файлов достигает определенного порога, процесс просто повторяется бесконечно и выдает вышеуказанную ошибку для каждого файла.

например, один из файлов имеет имя "Power_Drawal_from_23.07.2021___24.07.2021".

количество файлов превысит 22 (для данного имени файла), он переименует его в "TlungvelSolar TlungvelSolar TlungvelSolar TlungvelSolar TlungvelSolar TlungvelSolar TlungvelSolar TlungvelSolar TlungvelSolar TlungvelSolar TlungvelSolar TlungvelSolar TlungvelSolar Power_Drawal_from_23.07.2021___24.07.2021" (количество повторений ограничено максимальным ограничением Windows на 256 символов пути к файлу).

я хочу, чтобы он переименовал его в "TlungvelSolar Power_Drawal_from_23.07.2021___24.07.2021".

Опять же, все работает нормально, если количество файлов меньше, и, похоже, это также зависит от имен файлов.

проблема возникает из-за подачи элементов в конвейер при изменении исходного текста. [grin], что позволяет довольно легко повторно обрабатывать один и тот же элемент - в коде он выглядит как другой элемент.

Исправление заключается в одном из следующих решений ...

  • собрать все элементы в $Var и передать всю коллекцию в конвейер
  • вызов G-CI в скобках, чтобы заставить вызов захватить все за один раз
  • используйте цикл foreach

я предпочитаю 3-й вариант, поскольку он делает набор шагов намного проще, очевиднее... и, следовательно, легче отлаживать. [grin]


NevaDev, 23 января 2023 г., 18:21