gpt4 book ai didi

powershell - 以1000个powershell导出/附加csv

转载 作者:行者123 更新时间:2023-12-03 12:04:21 27 4
gpt4 key购买 nike

我正在尝试在设置的日期之后从设置的位置提取所有.txt和.pdf文件,并将其导出到csv。它可以工作到一定程度,但是当我输入过多的数据时,它就会崩溃(例如对服务器进行排序)。我认为内存已满。它也必须像当前一样递归。如果我只是在-Append之后添加Export-Csv,它告诉我“附加对象没有对应于以下列的属性:”,然后添加-Force,但是如果我在-Force之后添加-Append,它告诉我“无法处理参数,因为的值参数“名称”无效”。我一直在看ForEach Cmdlet,但无济于事。如果有的话,寻找一些智慧:)

Param(
$startdate = (read-host -Prompt "Enter date"),
$today = (Get-Date),
$RelPath = (read-host -Prompt "Enter filepath"),
$RelFiles = "FullName"
)
Get-ChildItem -Path $RelPath"*.pdf", "*.txt" -Recurse|
Where-Object { $_.LastWriteTime -gt $startdate -and $_.LastWriteTime -lt
$today}|select -Property $RelFiles |sort -Property $RelFiles |export-csv
C:\PowershellNewWork\New.csv

最佳答案

假设您只需要一列,那么可以节省内存并使脚本更快:

  • IO.DirectoryInfo.EnumerateFilesGet-ChildItem
  • 更快
  • Collections.Generic.SortedSetSort更快,并且不重复
  • 的内容
  • 以文本文件而不是Export-Csv的形式写入数组。手动将双引号添加到每个值
  • 不用流水线,而使用更快的foreach语句和简单的if检查

  • $files = [Collections.Generic.SortedSet[string]]@()
    foreach ($file in ([IO.DirectoryInfo]$RelPath).EnumerateFiles('*', 'AllDirectories') {
    if (($file.Extension -eq '.pdf' -or $file.Extension -eq '.txt') -and
    $file.LastWriteTime -gt $startdate -and $file.LastWriteTime -lt $today)
    {
    $files.Add('"' + $file.$RelFiles + '"') >$null
    }
    }
    $UTF8noBOM = [Text.UTF8Encoding]$false
    [IO.File]::WriteAllLines('r:\out.csv', '"' + $RelFiles + '"', $UTF8noBOM)
    [IO.File]::AppendAllLines('r:\out.csv', $files, $UTF8noBOM)

    在PowerShell 5的高度嵌套的文件夹中进行测试,该文件夹具有96K个文件,该文件会生成2500行的CSV:
    2秒,原始代码为15秒,
    3 MB和20 MB内存使用。

    关于powershell - 以1000个powershell导出/附加csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44511256/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com