powershell文件名的唯一部分列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了powershell文件名的唯一部分列表相关的知识,希望对你有一定的参考价值。

我有多台机器将文件上传到一个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) }

关于如何做到这一点的任何提示?没有必要是一个班轮,虽然这将是一个很好的挑战;-)。

谢谢!

答案

当你有一个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
另一答案

没有经过测试但是这样:

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

您不需要在循环内部执行Write-Host,并且使用%而不是foreach循环更容易。

另一答案

将命令的结果输入| 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

以上是关于powershell文件名的唯一部分列表的主要内容,如果未能解决你的问题,请参考以下文章

带有转换的片段交易 - 需要唯一的转换名称

具有不同长度片段的简单 mpeg dash 播放列表

Powershell编码原因导致部分代码不执行

Powershell编码原因导致部分代码不执行

Powershell编码原因导致部分代码不执行

Powershell编码原因导致部分代码不执行