我在“clients”目录中有以下文件夹
Arizona
California
Connecticut
Default
Delaware
Florida
Hawaii
Idaho
Iowa
Maine
我有一个数组,它有以下项目:
Write-Host "Printing the array "
$ExcludeArray
Output----
"Arizona",
"California"
我正在尝试列出C:\Users\santhu\Desktop\Clients
中的文件夹,并使用以下命令排除$ExcludeArray
数组中的文件夹。
Get-Childitem C:\Users\santhu\Desktop\Clients -Force -Exclude $ExcludeArray
似乎排除不按预期工作。我相信原因可能是$ExcludeArray
中的项目不在同一行。如果有任何方法可以将它们转换为同一行并过滤文件夹,有人可以建议我吗?
仅供参考:$ExcludeArray
项不是静态的。我写不出像$ExcludeArray = "Arizona","California"
这样的东西。我期待以下输出。
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 3/20/2017 12:15 PM Connecticut
d---- 3/20/2017 12:15 PM Default
d---- 3/20/2017 12:15 PM Delaware
d---- 3/20/2017 12:15 PM Florida
d---- 3/20/2017 12:15 PM Hawaii
d---- 3/20/2017 12:15 PM Idaho
d---- 3/20/2017 12:15 PM Iowa
d---- 3/20/2017 12:15 PM Maine
d---- 3/20/2017 12:15 PM Minnesota
答案 0 :(得分:1)
试试这个:
Get-Childitem C:\Users\santhu\Desktop\Clients\* -Force -Exclude $ExcludeArray
排除和包含开关在这里有点棘手。它适用于最后提到的路径。所以通配符应该做你的工作。确保数组中没有任何双引号。
答案 1 :(得分:1)
我们现在知道您的主要问题是{strong>内容$ExcludeArray
,您动态构建的字符串数组(排除模式),其元素要么错误地使用嵌入 "
字符。 (例如,"Arizona"
而不仅仅是Arizona
)或者,$ExcludeArray
错误地包含单个多行字符串而不是数组。
要将文件中的行读入字符串数组的元素,只需$ExcludeArray = Get-Content file
如果文件的行包含"
个字符括起来的字符串。可能以,
终止(例如,"Arizona",
或"California"
,您需要修剪这些字符:
$ExcludeArray = (Get-Content File) -replace '^"(.*)",?', '$1'
使用正确构造的数组,您的原始命令 可以正常工作,但如果$ExcludeArray
中的所有模式都不匹配 在这种情况下,输入路径的最后一个组件 - Client
。
换句话说:-Exclude
和-Include
可能意外地与输入路径的最后一个路径组件(文件中的文件名)进行比较path,目录路径中的目录名称。)
对于Get-ChildItem
,与父目录名匹配的 >项目(目录中 目录中的项目)匹配,如果父项不匹配,则甚至不查看子项目,也不输出任何项目。
This answer更详细地解释了这种不直观的行为。
因此,最好找到解决问题的通常很健壮的习惯用法,避免匹配父目录的名称:
Get-ChildItem
切换到Get-Item
。\*
附加到您的输入路径。具体做法是:
Get-Item C:\Users\santhu\Desktop\Clients\* -Force -Exclude $ExcludeArray
相比之下,如果你追加\*
但坚持Get-*Child*Item
,就像Ranadip Dutta's answer一样,你的命令会有不同的表现:你会得到内容 (子项目)未排除的任何子目录,而不是目录本身。
答案 2 :(得分:0)
此代码在我的电脑上运行
$ExcludeArray="Arizona","California"
Get-ChildItem "C:\Users\santhu\Desktop\Clients" -Exclude $ExcludeArray
或者像这样
$ExcludeArray="Arizona","California"
Get-ChildItem "C:\Users\santhu\Desktop\Clients" | where Name -notin $ExcludeArray