通过迭代器向数组添加数据行

时间:2013-11-21 16:29:29

标签: arrays powershell

我正在遍历一个充满子目录的目录,在每个级别寻找最新的文件。

下面的代码执行此操作,但我需要能够将迭代器的每个行/循环添加到数组中,以便最后我可以以表格格式输出所有数据以便在Excel中使用。

关于我如何做到这一点的任何建议?

    $arr = get-childItem -Path "\\network location\directory" | select FullName
    $res = @()

    foreach($fp  in $arr)
    {

    get-childItem -Path $fp.FullName | sort LastWriteTime | select -last 1 Directory, FullName, Name, LastWriteTime

    }

2 个答案:

答案 0 :(得分:1)

这里有一个单行代码,通过反引号转义字符拆分成多行以便于阅读。你可以复制粘贴它,它将按原样运行。 csv文件将在您运行它的文件夹中创建。

dir -rec -directory | `
    foreach {
        dir $_.fullname -file | `
        sort -Descending lastwritetime | `
        select -first 1
    } | `
    export-csv newestfiles.csv

dirget-childitem的别名。 foreachforeach-object的别名。 %gcilsget-childitem的更短别名。请注意,我避免将数据存储在数组中,因为这会使所需的工作量增加一倍。无需枚举文件夹,然后将数组枚举为两个单独的操作。

希望这有帮助。

答案 1 :(得分:0)

如果我理解正确,您只需要将结果输入$ res。因此,添加| %{$res += $_}应该可以解决问题

  $arr = get-childItem -Path "\\network location\directory" | select FullName
  $res = @()


    foreach($fp  in $arr)
    {

     get-childItem -Path $fp.FullName | sort LastWriteTime | select -last 1 Directory, FullName, Name, LastWriteTime | % {$res += $_}

    }

    $res | % {write-host $_}