当谈到 powershell 时,我是一个完全的菜鸟,但我整天都在努力解决这个问题,不知道为什么。
每天,我都会在一个目录中有一组文件。这些文件将具有不同的名称和不同的扩展名,因此它们都是唯一的。我正在尝试重命名所有这些文件以包含相同的初始文件名,然后将当前日期时间放在末尾并且不包含扩展名。下面是我所拥有的。我浏览到我的文件所在的目录,创建我的变量以获取当前日期时间并按照我想要的方式格式化。然后我发出重命名命令,它在成功完成第一个文件后总是出错,因为它试图再次编辑已经重命名的第一个文件。任何帮助将不胜感激。提前致谢。
要重命名的示例文件名
test123.dat
341test.txt
983asdf.doc
所需的最终结果,每个文件都是唯一的,以毫秒为单位,您可以在下面的文件名中看到最后 4 个数字:
abcabcp123456789d202004271552001023
abcabcp123456789d202004271552001024
abcabcp123456789d202004271552001025
我尝试了什么:
$curDateTime = Get-Date -Format yyyyMMddTHHmmssffff
Get-ChildItem *.* | Rename-Item -NewName {'abcabcp123456789d' + $curDateTime}
如果我运行 -WhatIf,它说它工作正常,没有错误。当我实际运行它时,它说: Rename-Item : 当文件已经存在时无法创建文件。
即使是几毫秒也太快了吗?在 -WhatIf 中,即使它说没有错误,所有三个文件都以相同的名称显示。无论如何。再次感谢。
我尝试运行的更新变体:
Get-ChildItem *.* | ForEach {
Rename-Item -Path $_.FullName -NewName "$($_.DirectoryName)\$('abcabcp123456789d')$(Get-Date -F yyyyMMddTHHmmssffff)"
}
尝试了带括号的代码:
(Get-ChildItem *.*) | ForEach { Rename-Item -Path $_.FullName -NewName "$($_.DirectoryName)\$('abcabcp123456789d')$(Get-Date -F yyyyMMddTHHmmssffff)"}
带括号的新代码不起作用。我收到以下错误:
Rename-Item :当该文件已存在时无法创建该文件。在 line:1 char:33 + (Get-ChildItem . ) | ForEach { Rename-Item -Path $ .FullName -NewName "$($ .Dir ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~ + CategoryInfo : WriteError: (F:\abc\Test\Upl...00415-b-dbo:String) [Rename-Item], IOException + FullyQualifiedErrorId : RenameItemIOError,Microsoft.PowerShell.Commands.RenameItemCommand
这以稍微不同的方式完成工作。通过将事情从管道中取出并使用正常循环,您可以获得更直接的控制,并更清楚地看到每个步骤在做什么。[咧嘴笑]
它能做什么 ...
当您准备好对测试数据执行此操作时,会创建一些测试文件,只需删除整个
#region/#endregion
块。$SourceDir
没有输出。“制作测试文件”区域中的错误被抑制,但您应该看到任何其他问题的错误消息。
测试文件相隔大约 2-15 毫秒。如果您的系统是快速 enuf,那么您可能需要在该行
Start-Sleep
之前添加一个命令。$Suffix
也许像Start-Sleep -Milliseconds 10
.我还在
$Prefix
$Suffixto make it easier for me to read. you can remove that by changing the
-join '_'to
-join ''` 之间添加了一个下划线。编码 ...
重命名的文件...