【问题标题】:Renaming a range from files w/Powershell使用 Powershell 从文件重命名范围
【发布时间】:2018-11-05 16:55:36
【问题描述】:

我在这个问题上得到了一些帮助

Renaming a range from files w/Powershell - from first to third from last hyphen

效果很好,但现在我遇到了一个新问题。

我的 csv 文件名现在有随机数的连字符,如下所示:

abc-def-ghi-jkl-mno-pqr-s-tuv-ke-traffic-by-domains-17-Oct-2018_23-49-38-6d73395f476ad09a7506dc00533933b8.csv
abc-def-ghi-jkl-ke-traffic-by-domains-15-Oct-2018_05-20-36-75eabae7c4123198ff5fe6f4f642449f.csv
abc-def-ghi-jkl-mno--ke-traffic-by-domains-12-Oct-2018_06-23-58-b13eb8f362c09fbe405458fac8af8f8e.csv

连字符的数量因文件而异。

我想用 powershell 将它们重命名为

abc-17-Oct-2018.csv
abc-15-Oct-2018.csv
abc-12-Oct-2018.csv

我尝试了以下方法:

1.删除“_”后的所有内容

Get-ChildItem -Filter *.csv | Foreach-Object -Process { 
    $NewName = [Regex]::Match($_.Name,"^[^_]*").Value + '.csv'
    $_ | Rename-Item -NewName $NewName
}

2.删除第一个“-”之后直到“ke-traffic-by-domains-”的所有内容

Get-ChildItem -Filter *.csv | Rename-Item -NewName { 
$word = "-*ke-traffic-by-domains-"
$NewName = $_.Name -split $word + '.csv' 
    $_ | Rename-Item -NewName $NewName
}

但我坚持使用正则表达式删除第 2 个范围。

有人可以告诉我更改文件名的方法吗?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    使用正则表达式匹配您的条件(请参阅Regex101.com

    Get-ChildItem *.csv |
      Where-Object Name -match '^([^\-]+)-.*?-traffic-by-domains-(\d{1,2}-\D{3}-20\d{2})_'|
        Rename-Item -NewName {"{0}-{1}.csv" -f $Matches[1],$Matches[2]} -WhatIf
    

    如果输出看起来没问题,请删除结尾的 -WhatIf

    在您的示例 csv 名称上运行脚本后,我的 Ramdrive 上的文件:

    > gci
    
        Verzeichnis: A:\
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----       2018-11-05     09:38              0 abc-12-Oct-2018.csv
    -a----       2018-11-05     09:38              0 abc-15-Oct-2018.csv
    -a----       2018-11-05     09:38              0 abc-17-Oct-2018.csv
    

    【讨论】:

    • 谢谢,我刚开始学习正则表达式,这对我很有帮助。但是,即使我删除 -WhatIf,您的答案似乎也没有改变。
    • 有人可以帮我理解这个答案吗?我不确定“-f $Matches[1],$Matches[2]”部分是什么意思,而且 powershell 对这个命令没有任何作用。
    • 检查输出后是否删除了-WhatIf?我在这里测试成功。 -match 运算符填充 $Matches 变量,来自 REgEx 的(捕获组)可以通过索引访问 - $Matches[0] 是整个 RegEx。 -f = format operator 解释为here
    猜你喜欢
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 2011-07-31
    • 2021-08-27
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 2014-03-03
    相关资源
    最近更新 更多