は、私は次のパターンに名前のJPG画像ファイルの束を持っている期待どおりに動作しません:PowerShellは、名前の変更、アイテムが
0001-rand01_012.jpg
0002-rand03_034.jpg
私は、フォームを取得するために、最初の5つの文字を除去することによって、それらの名前を変更したいです:
rand01_012.jpg
など。
私は、次のコマンドを使用します。
Get-ChildItem | Rename-Item -NewName {$_.name.Substring(5)}
を
-whatifフラグでこれを使用する場合は、私が期待したメッセージと言っ取得:
Performing the operation "Rename File" on target "Item: C:\Users\xxxx\Documents\xx xx\temp2\0123-rand16_030.jpg Destination: C:\Users\
xxxx\Documents\xx xx\temp2\rand16_030.jpg".
しかしwhatif
を削除するには、私にこのタイプのエラーを与える:
Rename-Item : The input to the script block for parameter 'NewName' failed. Exception calling "Substring" with "1" argument(s): "startIndex cannot be
larger than length of string.
:
をRename-Item : Cannot create a file when that file already exists.
ファイル自体の名前は、意図したとおりに5つではなくランダムに削除されます。そこで、彼らは次のように終わっています
01.jpg
01.jpg
.
.
.
d14_001.jpg
など、私は成功を収めて、過去にそのようなファイルの名前を変更するには、このコマンドを使用している
。私がそのようなランダムな結果を得ているという事実は、私の髪を引っ張ることです。
'(Get-ChildItem)| Rename-Item -NewName {$ _。Name.Substring(5)} ' –
なぜこの動作が変更されるのですか? – 4c74356b41
@ 4c74356b41:これは、配列を 'Rename-Item'に渡す前に、まず配列内のすべての一致するファイルを明示的に収集します。しかし、それが_conceptual_ sense(最初に列挙して、名前を変更したファイルが列挙を妨げないようにする)の間に、私はそれが_technically_必要であるとは思わない - 私の答えに追加した脚注を見てください。 – mklement0