将两个不同的 Get-ChildItem 调用的结果合并到单个变量中以对它们进行相同的处理

2023-12-29

我正在尝试编写一个 PowerShell 脚本来从多个目录构建文件列表。将所有目录添加到主列表后,我想对所有文件进行相同的处理。

这就是我所拥有的:

$items = New-Object Collections.Generic.List[IO.FileInfo]

$loc1 = @(Get-ChildItem -Path "\\server\C$\Program Files (x86)\Data1\" -Recurse)
$loc2 = @(Get-ChildItem -Path "\\server\C$\Web\DataStorage\" -Recurse)

$items.Add($loc1) # This line fails (the next also fails)
$items.Add($loc2)

# Processing code is here

失败并出现此错误:

无法转换参数“0”,使用 值:“System.Object[]”,用于“添加”到 输入“System.IO.FileInfo”:“不能 转换“System.Object[]”值 类型为“System.Object[]”的类型 “系统.IO.文件信息”。”

我最感兴趣的是针对这种情况的正确方法是什么。我意识到我的代码非常C http://en.wikipedia.org/wiki/C_%28programming_language%29这样做的方式——如果有更多的 PowerShell 方式来完成相同的任务,我完全赞成。关键是数量$loc#'s可能会随着时间的推移而改变,因此在生成的代码中添加和删除一两个应该很容易。


不确定您是否需要这里的通用列表。您可以只使用 PowerShell 数组,例如:

$items  = @(Get-ChildItem '\\server\C$\Program Files (x86)\Data1\' -r)
$items += @(Get-ChildItem '\\server\C$\Web\DataStorage\' -r)

PowerShell 数组可以使用以下方式连接+=.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将两个不同的 Get-ChildItem 调用的结果合并到单个变量中以对它们进行相同的处理 的相关文章

随机推荐