Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.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 - Fatal编程技术网

如何使用Powershell将对象与阵列进行比较?

如何使用Powershell将对象与阵列进行比较?,powershell,Powershell,我正在处理两个数据集。一个用于过滤另一个。基本数据集是一组使用如下命名方案的文件夹: 003 003 rev 1 003 rev 2 004 005 etc... C:\>$numSet 003 005 C:\>script.ps1 #This is set up to output $folderLocationArray C:> 我有第二组数字,表示要从第一组中提取哪些文件夹。我使用 $numSet = Import-Csv $csvLoc | Where {$_.

我正在处理两个数据集。一个用于过滤另一个。基本数据集是一组使用如下命名方案的文件夹:

003
003 rev 1
003 rev 2
004
005
etc...
C:\>$numSet
003
005
C:\>script.ps1 #This is set up to output $folderLocationArray

C:>
我有第二组数字,表示要从第一组中提取哪些文件夹。我使用

$numSet = Import-Csv $csvLoc | Where {$_.ItemCategory -eq "CatagoryName"} | Select-Object -ExpandProperty "Folder ID"
它们看起来像这样:

003
003 rev 1
003 rev 2
004
005
etc...
C:\>$numSet
003
005
C:\>script.ps1 #This is set up to output $folderLocationArray

C:>
到目前为止,这正是我想要的。现在我要做的是,使用Get ChildItem命令,导入文件夹的位置,以便我可以使用它们

# This is about how I believe I should go about this.
$folderLocationArray = Get-ChildItem -Path $sourceDir | Where {$numSet.Contains($_.Name)}
因为我需要对照数组进行检查,最明显的选择是-contains,除了它不允许我使用通配符之外,而且某些文件名后面的rev意味着这些文件不会显示。情况就是这样:

C:\>$folderLocationArray
003
005
我也尝试过用同样的结果来匹配和喜欢。不是错误,而是脚本处于运行状态,或者返回如下空白:

003
003 rev 1
003 rev 2
004
005
etc...
C:\>$numSet
003
005
C:\>script.ps1 #This is set up to output $folderLocationArray

C:>
我知道基本原理是合理的,因为我可以插入一个数字,它可以工作,即使使用数组作为输入,它仍然会返回文件,只是不会返回带有rev的文件

我不知所措。如何使用Get ChildItem并根据数组筛选数组

编辑: 澄清


我有一张号码表。我有一堆文件夹。每个文件夹都以一个数字开头。有些共享相同的号码。我想知道哪些文件夹与列表匹配。

这将使用基于$numset数组中项目的筛选器

$numset = @('003', '005')

foreach ($base in $numset) {
    Get-ChildItem -Directory -Recurse -Filter $($base + "*")
}

这将使用基于$numset数组中的项的筛选器

$numset = @('003', '005')

foreach ($base in $numset) {
    Get-ChildItem -Directory -Recurse -Filter $($base + "*")
}

基于数组的过滤结果

@("001","002","023","006") | foreach{Get-ChildItem -Path $path -filter "$_*" -Recurse -Directory}

基于数组的过滤结果

@("001","002","023","006") | foreach{Get-ChildItem -Path $path -filter "$_*" -Recurse -Directory}

我不知道你在问什么。你只是想比较两个数组并找到相同或唯一的?我希望按编号筛选文件夹名称,以便只保留名称中包含编号的文件夹。因此,你希望所有以编号开头的文件夹都正确吗?说明:如果数组中有003,是否希望文件夹003,003版本1和003版本2将被视为命中率?@JeffZeitlin没错。所有文件夹都将以数字开头。我只想要以我创建的数组中的数字开头的文件夹。我不知道你在问什么。你只是想比较两个数组并找到相同或唯一的?我希望按编号筛选文件夹名称,以便只保留名称中包含编号的文件夹。因此,你希望所有以编号开头的文件夹都正确吗?说明:如果数组中有003,是否希望文件夹003,003版本1和003版本2将被视为命中率?@JeffZeitlin没错。所有文件夹都将以数字开头。我只想要以我创建的数组中的数字开头的文件夹。不幸的是,我无法使这个文件夹正常工作,而ArcSet提出的那个文件夹已经正常工作了。我会在周一继续尝试,以再次检查,谢谢@HairyDresden-好的。这两种解决方案基本相同。我给这个添加了一个-递归,这可能是它没有看到目录的原因。不幸的是,我无法让这个工作,而ArcSet提出的那个工作已经完成了。我会在周一继续尝试,以再次检查,谢谢@HairyDresden-好的。这两种解决方案基本相同。我在这个目录中添加了一个-Recurse,这可能是它没有看到目录的原因。