【问题标题】:How to reorder date format in filename如何重新排序文件名中的日期格式
【发布时间】:2017-02-03 09:29:00
【问题描述】:

我一直在寻找有关 PowerShell 变量和重命名函数的任何帮助的 stackoverflow 和其他在线论坛。我没有运气。

我使用的文件名约定是:CompanyName 12.31.15 FS (“FS”描述了文件的内容,在这种情况下是财务报表)。个位数月份前面有 3 个空格,因此“FS”总是在 Windows 资源管理器中以视觉方式结束。)

虽然我想将其更改为 yy.mm.dd,但日期格式为 m.dd.yy。问题是我有超过 30 个文件夹,其中包含无数文件 - 有些不遵循此文件命名约定,但如果他们使用 m.dd.yy 格式,那么文件名肯定遵循约定。

这就是我要找的东西:

  • 一种仅将文件名的日期部分从 m.dd.yy 切换到 yy.mm.dd 的方法

  • 这样做,还要删除 2 个前导空格(目前有 3 个),并且在 CompanyName、日期和内容之间只有一个空格。

  • 必须在“公司”文件夹内的多个目录中更改文件


例子:

目前:

CocaCola 12.31.15 FS

CocaCola  6.30.15 FS

我想要:

CocaCola 15.12.31 FS

CocaCola 15.06.31 FS

【问题讨论】:

    标签: date powershell rename wildcard filenames


    【解决方案1】:

    使用Get-ChildItem cmdlet 检索文件。使用Rename-Item 重命名它。 要切换日期,您可以对其进行解析并将其格式化为所需的输出。但是,您也可以使用regex 完成所有操作:

    $yourCompanyPath = 'C:\tmp'
    
    $callback = {  
        param($match) 
    
        '{0} {1}.{2:D2}.{3} {4}' -f $match.Groups["CompanyName"].Value, 
            $match.Groups["Year"].Value,
            [int]$match.Groups["Month"].Value,
            $match.Groups["Day"].Value,
            $match.Groups["FS"].Value
    }
    
    $rex = [regex]'(?<CompanyName>\S+)\s+(?<Month>\d+)\.(?<Day>\d+)\.(?<Year>\d+)\s+(?<FS>FS)'
    
    Get-ChildItem $yourCompanyPath | Foreach {
        $_ | Rename-Item -NewName ('{0}{1}' -f $rex.Replace($_.BaseName, $callback), $_.Extension)
    }
    

    来源示例:

    CocaCola  6.30.15 FS.csv
    CocaCola 12.31.15 FS.csv
    

    输出:

    CocaCola 15.06.30 FS.csv
    CocaCola 15.12.31 FS.csv
    

    【讨论】:

    • 我测试了你的脚本两次。它似乎适用于源示例,但当我在文件夹上尝试它时它不起作用:它对具有前导 3 个空格的文件名没有做任何事情。看起来它在其他日期中重复了几次,因为格式最终是日、年、月。可能是我忽略了“FS”部分可能不仅仅是一个单词,它可能包含更多的单词,在 .filetype 之前用空格分隔。
    • 你想告诉我什么?我回答了你的问题,因为问题是关于文件,不是文件夹。
    • 我猜有两件事:我希望它适用于单个文件名,即使它们嵌套在文件夹中并且我的脚本不起作用(即使只适用于一个文件夹的内容)。看起来它循环文件名的次数太多了。
    猜你喜欢
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 2021-02-03
    • 2023-03-13
    相关资源
    最近更新 更多