【问题标题】:Renaming files based on their existing filename [closed]根据现有文件名重命名文件[关闭]
【发布时间】:2019-12-24 00:48:43
【问题描述】:

尝试根据现有文件名重命名数千个文件。所有文件都位于不同的子文件夹中,并由程序输出,文件名格式为: yyyy-mm-dd_filenameinfo.txt

需要重命名为: dd-MMM-yyyy_filenameinfo.txt

一个例子是: 2008-03-14_outputs.txt,更改为 2008 年 3 月 14 日_outputs.txt

我了解这样做会导致无法按日期排序,但不幸的是,这是提交过程的要求。

我已经做了一些研究,但我对 cmd line 或 powershell 非常不熟悉,而且我无法找到已经问过这个问题的位置。

【问题讨论】:

  • Rename-Item 是您需要的命令。将几个文件复制到测试目录中,看看你是否可以让它工作。你现在的问题不是good question
  • 虽然以适当的可排序格式重命名文件不是 IMO 的最佳主意,但如您所愿,gci [12][09][0-9][0-9]-[01][0-9]-[0-3][0-9]_* -File -Rec|Ren -Newname {'{0:dd-MMM-yyyy}_{1}' -f (Get-Date ($_.Name.Split('_')[0])),($_.Name.Split('_')[1])} -whatIf 如果输出看起来正常,请删除尾随 -whatif
  • @LotPings 感谢您的回答!是否有一个位置可以找到有关其工作原理的更多信息?它确实可以满足我的需要,但我总是乐于学习更多。

标签: powershell cmd rename filenames


【解决方案1】:

详细说明我的评论:


Get-ChildItem [12][09][0-9][0-9]-[01][0-9]-[0-3][0-9]_* -File -Recurse

递归返回以本世纪/上一世纪的日期开头的文件名

|Rename-Item -Newname {'{0:dd-MMM-yyyy}_{1}' -f (Get-Date ($_.Name.Split('_')[0])),($_.Name.Split('_')[1])}

这里:

$_.Name.Split('_')

把名字分成两部分,追加索引[0],[1]选择的第一、二部分。

Get-Date 将日期转换为 [datetime],通过 -f format operatordd-MMM-yyyy OTOH 将其转换为所需的格式

【讨论】:

    猜你喜欢
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 2015-02-01
    • 2017-12-23
    • 1970-01-01
    • 2023-03-14
    • 2023-03-29
    相关资源
    最近更新 更多