Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于搜索类似文件名的Powershell脚本_Powershell_Search - Fatal编程技术网

用于搜索类似文件名的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

我正在尝试构建一个PowerShell脚本,该脚本可以搜索文件夹中具有类似名称的文件

文件将始终具有类似的名称模板:

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”|做其他事情