使用PowerShell将文件夹中的所有文件重命名为每个文件上次写入时间


$getdate = Get-Date -Format "yyyymmddHHmmss"
Get-ChildItem -Path C:blah*.tiff | foreach { rename-item -Path $_.FullName -NewName "($getdate).tif" }

这只是告诉我文件已经存在,好像它试图将它们全部更改为相同的日期和时间。

这是每个文件应该重命名的,但以.tif结尾,而不是以.tiff结尾。

Get-ChildItem -Path C:blah*  | Get-Date -Format "yyyymmddHHmmss"
20221413111408
20222013112039
20225413115422
20221816071813

我如何让这个工作,以便每个文件进入到他的文件夹被重命名时,我运行这个

我也试过这个:

Get-ChildItem -Path C:Blah*.tiff | foreach { rename-item -Path $_.FullName -NewName "Get-Date -Format ("yyyymmddHHmmss").tif" }

这给了我这个错误:

Rename-Item : A positional parameter cannot be found that accepts argument 'yyyymmddHHmmss).tif'.
At line:1 char:52
+ ... | foreach { rename-item -Path $_.FullName -NewName "Get-Date -Format  ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (:) [Rename-Item], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.RenameItemCommand

它目前正在尝试将所有文件重命名为相同的日期时间戳,因为你要求它-存储在$getdate中的值不会自动更新自己:)

相反,每次通过将scriptblock传递给-NewName参数来重命名单个文件时,您都会想要调用Get-Date- PowerShell将重新评估它重命名的每个文件的scriptblock:

Get-ChildItem -Path C:blah*.tiff |Rename-Item -NewName { "$($_ |Get-Date -Format 'yyyymmddHHmmss').tif" }

正如Santiago指出的那样,如果您有多个映像文件在相同的wallclock秒内最后一次写入/修改,那么这仍然会因命名冲突而失败。

最新更新