我想删除特定的文件名,但保留特定的文件名

时间:2019-09-17 13:22:18

标签: powershell rename

嗨,我想删除文件名中的随机单词,但保留其中一些

示例:

原始文件名;

  • RX PPLLC-史密斯博士-约翰·史密斯-疼痛,疤痕和肌肉松弛剂-非诺洛芬200毫克
  • RX PPLLC-史密斯博士-约翰·史密斯-疼痛和疤痕-利多卡因7%7%
  • RX PPLLC-史密斯博士-约翰·史密斯-疼痛,皮炎和肌肉松弛剂-多虑平5毫克

应该是什么样子

  • RX PPLLC-史密斯博士-约翰·史密斯-疼痛-非诺洛芬200mg
  • RX PPLLC-史密斯博士-约翰史密斯-疼痛-利多卡因7%7%
  • RX PPLLC-史密斯博士-约翰史密斯-疼痛-多虑平5 mg

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以从以下类似内容开始。假定您要替换str和空格加连字符之间的文本。

Pain

说明:

Get-ChildItem -Path "*Pain*" -File | Rename-Item -NewName {$_.Name -replace '(?<=\bPain\b).*(?= -)'} -WhatIf 将返回当前目录中名称中包含Get-ChildItem -Path "*Pain*" -File的所有文件。您可以添加Pain参数以在子目录中查找符合条件的所有文件。

由于-Recurse支持延迟的脚本绑定,因此我们可以简单地将Rename-Item -NewName的结果传递到其中并访问Get-ChildItem属性。

Name是执行正则表达式匹配的替换运算符。

  • -replace是一个肯定的后置断言,可确保文件名包含单词(?<=\bPain\b),并且在满足该条件之前不会开始匹配字符。
  • Pain匹配0个或多个除换行符以外的字符。
  • .*是一个肯定的超前断言,可确保当前匹配项后有(?= -)(单个空格加-)。

-操作的作用是替换-replacePain之间的所有字符。可以轻松地针对不同场景进行调整。您对数据了解的越多,定义正则表达式就越好。

如果要输出重命名的文件,可以将-开关添加到-PassThru

请参见Regex Demo,以了解Rename-Item正则表达式的匹配方式。有关将-replace参数与replace结合使用的更多信息,请参见Rename-Item,特别是-NewName部分和示例4。