【问题标题】:Find files beginning with string and remove X characters from filename Powershell查找以字符串开头的文件并从文件名中删除 X 字符 Powershell
【发布时间】:2014-10-09 11:27:28
【问题描述】:

我环顾四周并在谷歌上搜索了一个解决方案,但似乎没有什么能满足我的要求。

我每天有 40 个左右的文件到达,在我需要删除的文件名开头带有一个日期时间字符串。

文件格式为: YYYYMMDD_HHMM_filenametokeep.csv

我想首先在以 20 开头的文件夹中查找文件(因为那是文件名中 YYYY 的开头),然后通过从这些文件名中删除前 14 个字符来重命名它找到的所有文件。

理想情况下,我想在 powershell 中执行此操作,以便我可以将其作为 SQL 作业中的一个步骤。

有人对此有任何想法/解决方案吗?

在此先感谢

【问题讨论】:

  • 如果多个文件的“filenametokeep”相同怎么办?应该覆盖它吗?
  • 嗨,对不起,我应该提到它永远不会一样。每个文件都有不同的结尾。谢谢

标签: powershell rename


【解决方案1】:
Ls d:\path\to\folder\20*.csv | ren -new { $_.name -replace '^.+?_.+?_' }

或者你也可以使用:

Ls d:\path\to\folder\20*.csv | ren -new { $_.name -replace '^.{14}' }

【讨论】:

  • 谢谢,但是如何指定一个文件夹来运行它?
  • 所以我使用了这个脚本,并将 20*.csv 更改为 D:\path\to\folder\20*.csv它会找到并删除我需要的字符,但它也会删除文件扩展名。我如何保留文件扩展名?谢谢
  • @user2992750 你可以使用.Name 而不是.Basename。尚不确定这将如何影响您的正则表达式
【解决方案2】:

如果您真的打算只删除前 14 个字符,您也可以使用 .SubString 来执行此操作

Get-ChildItem D:\path\to\folder\20*.csv | ForEach-Object{ 
    Rename-Item -Path $_ -NewName ($_.Name.SubString($_.Name.Length -14))}

这个TechNet article 谈论.Substring 被用作VBS Right 方法。它将返回一个字符串减去前 14 个字符。

【讨论】:

    猜你喜欢
    • 2016-04-10
    • 2011-05-01
    • 1970-01-01
    • 2020-09-01
    • 2013-05-03
    • 2015-12-02
    • 1970-01-01
    • 2017-04-01
    • 2016-10-18
    相关资源
    最近更新 更多