我正在尝试使用相同名称结构重命名多个文件夹中的文件。我得到了以下文件:
我想在其前面添加以下文本:“主题丢失”
我只想重命名这些文件,其他所有文件都应保持不变
答案 0 :(得分:1)
给LotPings的帽子提示,建议在正则表达式中使用先行断言。
Get-ChildItem -File | Rename-Item -NewName {
$_.Name -replace '^(?=\(\d+\)\.)', 'Subject is missing '
} -WhatIf
-WhatIf
预览重命名操作;删除它以执行实际的重命名。
Get-ChildItem -File
仅枚举文件,但没有名称过滤器-虽然您可以尝试预先应用基于通配符的过滤器-例如-Filter '([0-9]).*'
-您不能确保< em>多位数字名称(例如(13).txt
)正确匹配。
-Filter '(*).*'
Rename-Item
调用使用delay-bind script block来获得新名称。
-rename
如果正则表达式不匹配,则返回未修改的输入字符串;(b)Rename-Item
如果新文件名与旧文件名相同。在传递给-replace
的正则表达式中,positive look-ahead assertion (?=...)
(在输入字符串(^
的开头匹配))寻找一个匹配子表达式\(\d+\)\.
,而不考虑它与应替换 的一部分匹配的内容。实际上,只有输入字符串的起始位置(^
)会被匹配并“替换”。
\(\d+\)\.
匹配文字(
(转义为\(
),后跟1个或更多(+
)个数字(\d
),后跟文字)
和文字.
(\.
),它们标志着文件扩展名的开始。 (如果要匹配没有扩展名的文件名,请将.\
替换为$
,即输入结束断言。)因此,替换操作数'Subject is missing '
实际上被前缀到输入字符串,以便例如(1).txt
返回Subject is missing (1).txt
。