Powershell - 通过数组内的数组导航

时间:2012-03-27 13:24:18

标签: arrays function powershell 7zip

我正在构建一个数组如下

$filelist2 = @()
$e = $null 
foreach ($e in $extBkupArr) {
        $filelist2 += ,(($e[1]),(Get-ChildItem $ToBeZipped"\*" -Recurse -Include $e[2] | Select-Object fullname ))
}

Array $ filelist2中有4项AA,AA,BB,BB。每个项目(除了一个)都有一个在上面的代码中收集的文件名数组。其中一个(第一个BB)是一个空数组。

数组数据如下所示:

{
{AA, 
{@{FullName=C:\Books1\work\src\book1.def}, 
 @{FullName=C:\Books1\work\src\book2.def}, 
 @{FullName=C:\Books1\work\src\book3.def}, 
 @{FullName=C:\Books1\work\src\man1.def}, 
 @{FullName=C:\Books1\work\src\book4.def}, 
 @{FullName=C:\Books1\work\src\man2.def}}}, 
{AA, 
{@{FullName=C:\Books1\work\src\book5.lst}, 
@{FullName=C:\Books1\work\src\book6.lst}}}, 
{BB, $null}, 
{BB, 
{@{FullName=C:\Books1\work\src\EmptyFolders.txt}, 
@{FullName=C:\Books1\work\src\ExcelWorkbooks.txt}, 
@{FullName=C:\Books1\work\src\table_of_contents.txt}, 
@{FullName=C:\Books1\work\src\WordDocuments.txt}, 
@{FullName=C:\Books1\work\src\ShortcutList.txt}
}}}

对于阵列中的4个项目(AA,AA,BB,BB)中的每一个,我想(1)确保它的文件名的数组值不为空,以及(2)如果它们不为null,则通过该辅助数组解析以提取Fullname字段。

该数据被传递给调用7zip的函数,该函数获取AA.FullName&中的值。将该文件压缩为与行上的值(AA,BB等)相关联的zip文件。该函数调用如下:

create-7zip "c:\temp\myFolder" "c:\temp\myFolder.zip"

从上面输入" c:\ temp \ myFolder"将是数组中的fullname字段," c:\ temp \"将是一个静态变量($ zipFldr),以及" myFolder.zip" filename将来自与该类型(AA,BB等)相关联的另一个文件名数组。

那么 - 函数将被调用:

create-7zip ($filelist2.Row(AA,AA,BB,BB).fullname(1 to n)) $zipFldr\$fArray($filelist2.Row)

我可以使用foreach解析$ filelist2数组。

foreach ($f in $filelist2) {
    if ($fArray.Containskey($f[0])) {
       if ($f(1)) { #null check
          $fArray[$f[0]]   <----- returns the appropriate zip file name
          $zipFldr         <----- returns the correct folder name
          $f[1]            <----- returns the list of fullnames within the array
          }
        else { write-host "Null Encountered for " $fArray[$f[0]] }
    }

但是,我无法将此信息成功传递到该功能中。 $ f [1]传递给函数时为null,$ fArray [$ f [0]]值是空值或system.collections.hashtable名称(而不是我想要的名称)。

在引用这些数组项时我做错了什么?

0 个答案:

没有答案