我有多台机器将文件上传到一个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) }
有关如何执行此操作的任何提示?没有必要是一个班轮,虽然这将是一个很好的挑战; - )。
谢谢!
答案 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
答案 1 :(得分:1)
没有经过测试但是这样的事情:
Get-ChildItem $strMOVETO -Name -Include TAS*.csv -Recurse | % { $_.Name.Substring(0,5) } | Sort -Unique
您不需要在循环内部执行Write-Host,而且使用%而不是foreach循环更容易。
答案 2 :(得分:0)
将您的命令结果导入| 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