【问题标题】:Powershell script to rename Files adding Last Modified date to name, script won't run in sub directories用于重命名文件的 Powershell 脚本将上次修改日期添加到名称中,脚本不会在子目录中运行
【发布时间】:2022-08-19 13:51:52
【问题描述】:

我有一个旧服务器存档,并希望通过将上次修改日期添加到文件名来重命名所有文件。 目录结构中有很多层文件夹。

我尝试了几个不同版本的脚本,第一级工作正常,然后在子文件夹上出错。

错误:

Rename-Item : Cannot rename because item at \'Stand.doc\' does not exist.
At line:1 char:42
+ ... ch-Object { Rename-Item $_ -NewName (\"{0}-{1}{2}\" -f $_.BaseName,$_.L ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand*

Stand.doc 是来自子目录的文件。

半工作脚本:

Get-ChildItem -recurse |Foreach-Object { Rename-Item $_ -NewName (\"{0}-{1}{2}\" -f $_.BaseName,$_.LastWriteTime.ToString(\'\"Last_Mod_Date_\"mmddyyyy\'),$_.Extension)  }

谢谢

  • 由于您只想重命名文件,您应该为Get-ChildItem 添加开关参数-File。 ;-)
  • 如果您已经阅读了我的答案,我已经对其进行了更新。我最初在 PS Core 中尝试过,但我可以在 PowerShell 5.1(Windows 中的版本)中重现该问题。我还没有 5.1 的解决方案,但我稍后会尝试重新访问。

标签: powershell rename


【解决方案1】:

毕竟,我已经能够使用 Windows PowerShell (5.1) 重现它,但我无法在 PowerShell Core 7.2.3 中重现它。我不太确定这里的问题是什么,但这个答案应该只被认为与 PowerShell Core 相关。稍后我将尝试重新访问,看看我是否无法弄清楚 PowerShell 5.1 发生了什么。

您需要将-File 参数与Get-ChildItem 一起使用。以下应该对您只返回嵌套文件有用,这样您就不会意外地尝试重命名目录:

Get-ChildItem -Recurse -File | Foreach-Object {
  Rename-Item -WhatIf $_ -NewName ( "{0}-{1}{2}" -f $_.BaseName, $_.LastWriteTime.ToString('"Last_Mod_Date_"mmddyyyy'), $_.Extension )
}

我在Rename-Item 中添加了一个-WhatIf 参数,一旦您确认正确的文件列表将被重命名,您可以删除它以实际进行重命名操作。

【讨论】:

  • 是的,我对此有不同的迭代,我确实不小心在帖子中遗漏了“-File”,对不起。它会看到文件树中的文件,只是 -Newname 上的错误。
【解决方案2】:

你好,早上好!

我知道我在这里发布我的答案,因为我可以选择以访客身份发布。

我的问题是:

我在路径 C:\Users\Me\My_Holiday_2022 中有这个文件夹“My_Holiyday_2022”。 在这个文件夹中,我再次有多个文件夹:

“地点_1” “地点_2” “地点_3” “地点_4”

我现在想编写一个 cmd 函数,我可以在其中通过我的路径并用升序重命名我的所有文件夹,如下所示:

“0i_”对于 i > 1 一旦“01_”存在,我必须增加bei +1

我的文件夹的目标图片是:

“01_Place_1” “02_Place_2” “03_Place_3” “04_Place_4”

在我的理想世界中,这将是完美的,因为没有任何文件夹可以重命名,所以我的程序可以运行到文件夹中的下一个子文件夹并在那里执行相同的操作,例如:

01_地点_1

   01_Week_1
   02_Week_2
   03_Week_3

我希望有人能帮助我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 2013-07-08
    相关资源
    最近更新 更多