【发布时间】:2022-01-01 00:42:09
【问题描述】:
过去几天有人帮助我找到了一个 POWERSHELL 脚本,它可以帮助我只移动前 8 个共同字符的文件。
脚本如下,效果很好
$destination_folder = "C:\TEMP\DESTINATION"
$filelist = Get-ChildItem -Path "C:\TEMP\ORIGIN" -File -Force -Recurse
$filelist|Group-Object -Property {$_.basename.Substring(0,8)}|Where-Object Count -gt 1 |
ForEach-Object {$_.Group | Move-Item -Destination $destination_folder}
我想要并且对我有很大帮助的是修改上述脚本,以便移动至少有 8 个共同数字字符的文件(即使它们不在name) 以便搜索整个文件名,而不仅仅是前 8 个字符。
你认为有可能得到这样的结果吗?
提前感谢大家
【问题讨论】:
-
您有文件名和结果组的示例列表吗?
-
@BoogaRoo 是的,数字是连续的,但并不总是在文件名的开头;有时它们可能位于末尾 (randomfile12345678.pdf),有时位于中间 (random12345678file.pdf) 或有时位于开头 (12345678randomfile.pdf)。谢谢
-
@MathiasR.Jessen 我必须使用的文件的示例列表与我在上面写给 BoogaRoo 的评论中报告的相同。是否足够或您需要更多信息?谢谢
-
this >>>
[regex]::Match('asdf1234567890987654321asdf' -replace '[^\d]', '\d{8}').Value -
所以,以防万一不是 100% 清楚,要在上面实施 Lee 解决方案,只需执行
$filelist | Group-Object -Property { [regex]::Match($_.BaseName -replace '[^\d]', '\d{8}').Value} | Where-Object { $_.Count -gt 1}...我删除了我的答案,因为他的答案更优雅,最终让我的答案耻辱。
标签: powershell filenames script get-childitem