ファイル数が多い場合、Powershell の Rename-Item が繰り返される

ファイル数が多い場合、Powershell の Rename-Item が繰り返される

(ここではすべてのパスを投稿します。気まずいほど親密な感じがしますが、何の害もありませんよね?)

これが私の 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}")。ディレクトリ内のファイル数が少ない場合は正常に動作します。ただし、ファイル数が特定のしきい値に達すると、プロセスが無期限に繰り返され、ファイルごとに上記のエラーが発生します。

たとえば、ファイル名の 1 つは「Power_Drawal_from_23.07.2021___24.07.2021」です。

ファイル数が 22 を超えると (このファイル名の場合)、名前が「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」です。

繰り返しになりますが、ファイル数が少ない場合は正常に動作しますが、ファイル名にも依存するようです。

答え1

問題はパイプラインにアイテムを投入することで発生しますソースを変更しながら。[ニヤリ] これにより、同じアイテムを再処理することが非常に簡単になり、コードからは別のアイテムのように見えます。

修正方法は、以下の解決策のいずれかのようになります...

  • すべてのアイテムを$Varに取り込み、それを完全なコレクションパイプラインに
  • 呼び出しを括弧で囲むとG-CI、呼び出しですべてを取得するように強制します。一度
  • foreachループを使用する

私は 3 番目の方法を好みます。これは、はるかに単純で、より明白な一連の手順になり、デバッグが容易になるからです。[ニヤリ]

関連情報