【问题标题】:Change file names with powershell DMY -> YMD使用 powershell DMY -> YMD 更改文件名
【发布时间】:2018-02-02 22:38:54
【问题描述】:

我必须在 Windows 计算机上更改很多文件,我将使用 Powershell 来完成。

文件名类似于 name_name_DDMMYYYY_XXXXXX.bmp

  • John_Doe_03062009_123456.bmp
  • John_Doe_27122016_567890.bmp

我想让它像 name_name_YYYYMMDD_XXXXXX.bmp 那样排序

  • John_Doe_20090603_123456.bmp
  • John_Doe_20161227_567890.bmp

我在 Powershell 中完全是个业余爱好者,刚刚开始将特殊字符替换为空。所以所有的帮助都很棒!

【问题讨论】:

  • -replace '_(\d{2})(\d{2})(\d{4})_', '_${3}${2}${1}_'
  • 这很聪明@AnsgarWiechers 您应该将其发布为答案。
  • 其实很基本。
  • @AnsgarWiechers - 您仍应将其发布为答案。

标签: regex windows powershell date powershell-2.0


【解决方案1】:

您要匹配和重新排序的 8 位数字位于下划线之间,因此您可以执行以下操作:

$pattern = '_(\d{2})(\d{2})(\d{4})_'
'John_Doe_03062009_123456.bmp' -replace $pattern, '_${3}${2}${1}_'

该模式匹配 3 个捕获组中下划线之间的 8 位数字,以便您可以通过反向引用($1$2$3)对捕获的子字符串重新排序。

有关-replace 运算符的更多帮助,请参阅here。有关正则表达式语法的更多帮助,请参阅here。 PowerShell 和普通 .Net 有一些细微差别,比如反向引用语法(\1 vs $1),但大部分都可以直接应用。

【讨论】:

  • 感谢您的帮助!阅读它,但仍然很难更改文件的名称。并不真正了解如何将所有文件名通过管道传输到替换脚本。我做了这个 $pattern = '(\d{2})(\d{2})(\d{4})' (ls).name -replace $pattern, ' ${3}${2}${1}' 它只是在Powershell中列出它们的更改名称,然后在文件上实际更改名称:P
  • 我选择了给出这个解决方案的答案 ls | %{ 任 $_ $(($_.name -replace '(\d{2})(\d{2})(\d{4})', '$ {3}${2}${1}'))}
  • ls | Rename-Item -NewName {$_.Name -replace ...}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-29
  • 2021-09-02
  • 1970-01-01
  • 2020-12-19
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
相关资源
最近更新 更多