替换文件夹PowerShell中文件中的文本
我有一个文件夹,其中包含像“goodthing 2007adsdff.pdf”、“betterthing 2007adfdsw.pdf”和“bestthing_2007fdsfad.pdf”这样的文件,我希望能够重命名它们,删除所有文本,包括2007或_2007,直到字符串keeping.pdf的结尾,并得到以下结果:'goodthing.pdf''betterthing.pdf''bestthing.pdf'我已经用“_2007”尝试过了,但还没有找到处理“2007”的条件。任何关于如何实现这一点的建议都将不胜感激替换文件夹PowerShell中文件中的文本,powershell,Powershell,我有一个文件夹,其中包含像“goodthing 2007adsdff.pdf”、“betterthing 2007adfdsw.pdf”和“bestthing_2007fdsfad.pdf”这样的文件,我希望能够重命名它们,删除所有文本,包括2007或_2007,直到字符串keeping.pdf的结尾,并得到以下结果:'goodthing.pdf''betterthing.pdf''bestthing.pdf'我已经用“_2007”尝试过了,但还没有找到处理“2007”的条件。任何关于如何实现这
Get-ChildItem 'C:Temp\' -Name -Filter *.pdf | foreach { $_.Split("_2017")[0].substring(0)}
在不知道所有潜在文件名称的情况下,我可以提供100%的解决方案:
PS> $flist = ("goodthing 2007adsdfff.pdf","betterthing 2007adfdsw.pdf","bestthing_2007fdsfad.pdf")
PS> foreach ($f in $flist) {$nicename = ($f -replace "([\w\s]+)2007.*(\.\w+)", '$1$2') -replace "[\s_].","." ;$nicename}
goodthing.pdf
betterthing.pdf
bestthing.pdf
两大挑战:
希望这有帮助。在不知道所有潜在文件名称的情况下,我可以提供100%的解决方案:
PS> $flist = ("goodthing 2007adsdfff.pdf","betterthing 2007adfdsw.pdf","bestthing_2007fdsfad.pdf")
PS> foreach ($f in $flist) {$nicename = ($f -replace "([\w\s]+)2007.*(\.\w+)", '$1$2') -replace "[\s_].","." ;$nicename}
goodthing.pdf
betterthing.pdf
bestthing.pdf
两大挑战:
Get-ChildItem 'C:\Temp' -Name -Filter *.pdf |
Rename-Item -NewName { $_.Name -replace '[_ ][^.]+' } -WhatIf
注意:上面命令中的预览操作。一旦确定操作将执行所需操作,请删除-WhatIf
上面使用带有a和的重命名项
,如下所示:
- 正则表达式与第一个空格或字符中的所有内容匹配。(字符集
)到以下文字[\u]
字符。(
匹配一个或多个字符,而不是([^.]+
)而不是^
)-也就是说,从第一个
/
到文件扩展名的所有内容(不包括\
)- 注意:为了防止文件名匹配,例如
匹配(这将导致新名称仅为\u 2017.pdf
),请使用以下正则表达式:.pdf
”(?尝试以下操作:
注意:上述命令中的预览操作。一旦确定操作将执行所需操作,请删除Get-ChildItem 'C:\Temp' -Name -Filter *.pdf | Rename-Item -NewName { $_.Name -replace '[_ ][^.]+' } -WhatIf
上面使用带有a和的-WhatIf
,如下所示:重命名项
- Regex
匹配从第一个空格或[\][^.]+
字符(字符集
)到以下文本[\]
字符的所有内容。(
匹配一个或多个字符。除了([^.]+
)之外,其他字符都匹配^
)-也就是说,从第一个
/到文件扩展名(不包括
)- 注意:为了防止像
这样的文件名匹配(这只会导致\u 2017.pdf
作为新名称),请使用以下正则表达式:.pdf
'(
操作符使用正则表达式,因此您可以使用>-split
我喜欢它。这个正则表达式是多功能的,因为如果文件名中有多个空格,它会工作得很好。像“bestthing 2007asdfda.pdf”和“bestthing 2007dfsfds.pdf”这样的东西会被选中输出“bestthing.pdf”和“bestthing.pdf”非常感谢!很高兴能帮上一点忙…[咧嘴笑]($\uu.BaseName-split'\d{4}')[0]
操作符使用正则表达式,因此您可以使用>>-split
我喜欢它。这个正则表达式是通用的,因为如果文件名中有多个空格,它工作得很好。“best thing 2007asdfda.pdf”和“bestthing 2007dfsfds.pdf”之类的内容会被选中以输出“best thing.pdf”和“bestthing.pdf”谢谢你,非常欢迎!很高兴能帮上点忙…[咧嘴笑]很有趣。我删除了pdf过滤器,脚本工作得很好。谢谢you@RobbKrause这很奇怪,但我很高兴它能为你工作。很有趣。我删除了pdf过滤器,脚本工作得很好。谢谢you@RobbKrause这很奇怪,但我很高兴它对你有用。($\uUbASENAME-split'\d{4}|{uUd{4}')[0]
- 注意:为了防止像
- Regex
- 注意:为了防止文件名匹配,例如