嗨,我想删除文件名中的随机单词,但保留其中一些
示例:
原始文件名;
应该是什么样子
谢谢。
答案 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个或多个除换行符以外的字符。.*
是一个肯定的超前断言,可确保当前匹配项后有(?= -)
(单个空格加-)。 -
操作的作用是替换-replace
和Pain
之间的所有字符。可以轻松地针对不同场景进行调整。您对数据了解的越多,定义正则表达式就越好。
如果要输出重命名的文件,可以将-
开关添加到-PassThru
。
请参见Regex Demo,以了解Rename-Item
正则表达式的匹配方式。有关将-replace
参数与replace结合使用的更多信息,请参见Rename-Item,特别是-NewName
部分和示例4。