没有-WhatIf选项,重命名项目不起作用



我在Rename-Itemcmdlet中遇到了非常奇怪的行为。

我想重命名一堆文件,它们都位于同一(当前(目录中。在重命名之前,我解析原始文件名,对它们进行一些转换,最后在循环中调用Rename-Item命令来编写生成的文件名。

当我将-WhatIf选项添加到Rename-Item时,我可以看到它告诉我运行它将正确重命名文件。此外,如果我在重命名前通过打印$newFileName变量的值来输出结果文件名,它也会显示正确的新文件名。

但是,当我删除-WhatIf选项并运行脚本时,实际上没有重命名任何内容,也没有显示任何错误或警告!

我做了一些调查,发现如果我从代码中删除+ $_.Extension,cmdlet实际上会重命名文件,但它们当然没有扩展名。但我不明白为什么添加了扩展后它就不起作用了?!

原始文件名示例:x 005-Fuji-S-200-CA-6-F81-x 15A RAW.tif

目标是交换文件名中间部分的第一部分和最后一部分,因此生成的名称类似于x x-Fuji-S-200-CA-6-F81-005 15A RAW.tif

脚本(它总是从文件所在的目录中运行(:

Get-ChildItem -File -Filter '*.tif' -Recurse | 
ForEach {

$baseNameSpaced = $_.BaseName -split ' '

$filmIdArray = $baseNameSpaced[1] -split '-'

$first = $filmIdArray[0]
$filmIdArray[0] = $filmIdArray[-1]
$filmIdArray[-1] = $first
$baseNameSpaced[1] = $filmIdArray -join '-'

$newFileName = $($baseNameSpaced -join ' ') + $_.Extension    

Rename-Item -Path $_.FullName -NewName $newFileName
}

您正在修改循环的内容。首先获取完整的文件列表。一种常见的做法是将getchilditem放在括号中,以便它首先完成。

(Get-ChildItem -File -Filter '*.tif' -Recurse) | 

最新更新