【问题标题】:powershell list of unique parts of filename文件名唯一部分的powershell列表
【发布时间】:2013-02-27 22:11:25
【问题描述】:

我有多台机器将文件上传到一个 FTP 目录。文件名的第一部分是机器,其余部分是时间戳,例如AAAAA_20130312_125113。

现在我想获取已上传到此目录的所有 Unique 机器的排序列表。 我设法将丢失的所有 filenames.substring(0,5) 写入主机,但我仍然没有唯一的机器名称。

$files=Get-ChildItem $strMOVETO -Name -Include TAS*.csv -Recurse
ForEach ($i in $files) { Write-Host $i.Substring(0,5) }

关于如何做到这一点的任何提示?不一定非得是一个班轮,虽然那将是一个很好的挑战;-)。

谢谢!

【问题讨论】:

  • 顺便说一句:Write-Host is generally the wrong tool to use,除非意图是仅写入显示器,从而绕过 PowerShell 的成功输出流,从而绕过将输出发送到其他命令,将其捕获在变量中或将其重定向到文件。也就是说,在 PSv5+ 中,Write-Host 现在写入information stream,其输出可以被捕获,但只能通过6>

标签: sorting powershell unique filenames


【解决方案1】:

当您有一个 8 字符的机器名称时会发生什么?你的substring 会坏掉。由于机器名称、日期和时间由_ 分隔,因此拆分并获取第一项。

Get-ChildItem $strMOVETO -recurse -name -include TAS*.csv|%{$_.split("_")[0]}|sort-object -unique

也过滤日期:

Get-ChildItem $strMOVETO -recurse -include TAS*.csv|where-object{$_.lastwritetime -ge (get-date).adddays(-1)}|%{$_.basename.split("_")[1]}|sort-object -unique

【讨论】:

  • 机器名称长度确实是可变的。假设 [1] 而不是 [0] 将采用第二项(过滤器中的 TAS_xxxxxxxx),在最后一个管道之前放一个 } 就完成了!谢谢
  • 我可以将此命令与 Where-Object {$_.LastWriteTime -ge (Get-Date).AddDays(-1)} 结合使用吗?!?如果我省略 -Name 标签,则拆分不起作用,如果我使用 -Name 标签,则 LastWriteTime 不可用...
  • 是的,你可以 - 看看我的编辑。拆分不起作用,因为现在您已经省略了 -Name,您将得到一个对象集合,而不仅仅是一个名称列表。
  • 太棒了,你拯救了我的一天 ;-)
  • 请注意,-Name-Recurse 结合使用时会返回(相对的)paths 而不仅仅是位于子树下方的文件的文件 names ,在这种情况下,$_.split("_")[0] 将无法按预期工作。
【解决方案2】:

未测试,但类似:

Get-ChildItem $strMOVETO -Name -Include TAS*.csv -Recurse | % { $_.Name.Substring(0,5) } | Sort -Unique

您不需要在循环内执行 Write-Host,使用 % 代替 foreach 循环更容易。

【讨论】:

    【解决方案3】:

    将您的命令结果通过管道传输到| sort -unique

    $files=Get-ChildItem $strMOVETO -Name -Include TAS*.csv -Recurse
    ForEach ($i in $files) { Write-Host $i.Substring(0,5) } | sort -unique
    

    ...但最好还是简化脚本...

    $filter = "TAS*.csv"
    Get-ChildItem -Path $strMOVETO -Filter $filter -Recurse | % {$_.BaseName.Substring(0,5) } | sort -unique
    

    【讨论】:

      猜你喜欢
      • 2018-12-31
      • 2021-09-19
      • 2016-11-02
      • 1970-01-01
      • 2016-05-07
      • 2014-08-24
      • 2021-10-09
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多