我正在遍历一个充满子目录的目录,在每个级别寻找最新的文件。
下面的代码执行此操作,但我需要能够将迭代器的每个行/循环添加到数组中,以便最后我可以以表格格式输出所有数据以便在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
}
答案 0 :(得分:1)
这里有一个单行代码,通过反引号转义字符拆分成多行以便于阅读。你可以复制粘贴它,它将按原样运行。 csv文件将在您运行它的文件夹中创建。
dir -rec -directory | `
foreach {
dir $_.fullname -file | `
sort -Descending lastwritetime | `
select -first 1
} | `
export-csv newestfiles.csv
dir
是get-childitem
的别名。 foreach
是foreach-object
的别名。 %
,gci
和ls
是get-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 $_}