$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秒内最后一次写入/修改,那么这仍然会因命名冲突而失败。