如何重命名文件夹中所有指定的文件扩展名,同时保留文件时间戳



我正在尝试重命名集合的文件扩展名.txt files,同时保留时间戳。我第一次尝试使用Robocopy,但这个工具只能将文件从一个目录复制到另一个目录,同时保留文件时间戳(据我所知,文件扩展名无法更改(。我使用了PowerRename,它使文件扩展名重命名变得容易,但它也修改了重命名文件的时间戳。

最后,我使用WindowsMOVE命令来实现这一点(如下所示(:

MOVE "C:FolderFilename.txt" "C:FolderNew_Filename.txt"

但我在使用文件扩展名(特别是重命名多个文件扩展名(时遇到了问题。因为当我尝试使用这个代码示例来满足自己的需求时,我想到了这个:

Move-Item -Path C:UsersElonDownloadsnotes*.txt -Destination C:UsersElonDownloadsnotes*.md

该命令以错误"0"作为响应;移动项目:路径"-"中存在非法字符我怀疑这是因为我在目标位上使用了通配符?如有任何帮助,我们将不胜感激。谢谢大家!

尝试一下,基本上与Mathias的答案相同,但这使用了foreach-object循环,因此我们可以在重命名文件之前捕获LastWriteTime,然后在重命名文件之后,我们可以将旧日期设置为新文件(这就是为什么我们使用-PassThru,以便捕获指向新文件的对象(。

Get-ChildItem ./test/ -Filter *.txt | ForEach-Object {
$remember = $_.LastWriteTime
$newName = '{0}.md' -f $_.BaseName
$newFile = Rename-Item -LiteralPath $_.FullName -NewName $newName -PassThru
$newFile.LastWriteTime = $remember
}

使用Get-ChildItem查找目标文件,然后逐个移动:

Get-ChildItem C:UsersElonDownloadsnotes -File -Filter *.txt |Move-Item -Destination { "C:UsersElonDownloadsnotes$($_.BaseName).md" }

最新更新