用于搜索类似文件名的Powershell脚本
我正在尝试构建一个PowerShell脚本,该脚本可以搜索文件夹中具有类似名称的文件 文件将始终具有类似的名称模板:用于搜索类似文件名的Powershell脚本,powershell,search,Powershell,Search,我正在尝试构建一个PowerShell脚本,该脚本可以搜索文件夹中具有类似名称的文件 文件将始终具有类似的名称模板: filename(C).TIF 文件名(M).TIF 文件名(Y).TIF 文件名(K).TIF 我所需要做的就是提取“文件名”,检查是否有4个类似的文件(C、M、Y、K),并将其用作移动这些文件的变量 $files = Get-ChildItem -Path "E:\test" -Filter "*.TIF" | Foreach
filename(C).TIF
文件名(M).TIF
文件名(Y).TIF
文件名(K).TIF
我所需要做的就是提取“文件名”,检查是否有4个类似的文件(C、M、Y、K),并将其用作移动这些文件的变量
$files = Get-ChildItem -Path "E:\test" -Filter "*.TIF" |
Foreach-Object {$_.BaseName} | Sort-Object -Unique
$files = $files -replace ".{3}$"
$names = (Get-Unique -InputObject $files)
$names
结果如下所示:
jobname
工作名称
工作名称
工作名称
试验
试验
试验
测试
但在采取行动之前,我可能需要按唯一性排序并计算它们
但在采取行动之前,我可能需要按唯一性排序并计算它们
你肯定想要这个
顾名思义,它。。。根据某些公共属性对对象进行分组:
$filesByCommonBaseName = Get-ChildItem -Path "E:\test" -Filter "*.TIF" |Group-Object { $_.BaseName -replace '.{3}$' }
现在已将它们正确分组,您可以开始对它们进行如下操作:
foreach($entry in $filesByCommonBaseName){
Write-Host "Operating on files starting with $($entry.Name)"
if($entry.Count -eq 4){
# we found four matches, delete them!
$entry.Group |Remove-Item -Force
}
}
这很简单,你能告诉我们你的代码哪里有问题吗?
$files=Get ChildItem-Path“E:\test”-Filter“*.TIF”| Foreach对象{$\.BaseName}| Sort对象-Unique$files=$files-替换“{3}$”$names=(Get Unique-InputObject$files)$names
这是输出:jobname jobname jobname jobname测试
我的策略是比较或计算唯一的,并仅在计数为4时触发操作。@mathias-r-jessen非常感谢您的建议,它可以根据文件名对它们进行筛选和分组。我以前没用过。我可以单独询问每个组对象以检查它们是否与文件数匹配吗?@user3457421当然-组对象
输出一组具有名称
的对象,Count
和Group
属性-组
属性包含原始项的数组:$filesByCommonBaseName.Where({$\u.Name-eq'test')。Group
@mathias-r-jessen。如果我正在寻找一个特定的字符串,这是可行的,但我需要的是脚本在组对象中搜索名称,如果有4个条目,则移动这些特定的文件。对于这些愚蠢的问题,我很抱歉。@user3457421我已经更新了答案,这能让你更清楚地知道怎么做吗?@mathias-r-jessen这很有道理。非常感谢。我仍然可以在组对象内使用筛选函数吗?像过滤器“*(C).TIF”|这样做-过滤“(M).TIF”|做其他事情