【发布时间】:2019-07-25 02:02:55
【问题描述】:
我正在尝试重命名具有相同名称结构的多个文件夹中的文件。我得到了以下文件:
- (1).txt
- (2).txt
- (3).txt
我想在它前面添加以下文字:“主题丢失”
我只想重命名这些文件,其他的应该保持不变
【问题讨论】:
标签: powershell rename
我正在尝试重命名具有相同名称结构的多个文件夹中的文件。我得到了以下文件:
我想在它前面添加以下文字:“主题丢失”
我只想重命名这些文件,其他的应该保持不变
【问题讨论】:
标签: powershell rename
感谢 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) 如果新文件名是和旧的一样。在传递给-replace 的正则表达式中,positive look-ahead assertion(?=...)(在输入字符串的开头匹配 (^))查找子表达式 \(\d+\)\. 的匹配项,而不考虑它匹配的内容应该替换的一部分。实际上,只有输入字符串的开始 位置 (^) 被匹配和“替换”。
\(\d+\)\.匹配文字((转义为\(),后跟1个或多个(+)数字(\d),后跟文字)和文字@987654345 @ (\.),它标志着文件扩展名的开始。 (如果您想匹配没有扩展名的文件名,请将 .\ 替换为 $,即输入结束断言)。因此,替换操作数 'Subject is missing ' 被有效地添加到输入字符串,例如,(1).txt 返回 Subject is missing (1).txt。
【讨论】:
^ 替换为要添加的文本:$_.Name -replace '^(?=\(\d+\)$)', 'Subject is missing '