2

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

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

谢谢!

4

3 回答 3

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
于 2013-03-12T12:39:31.027 回答
1

未经测试,但类似这样:

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

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

于 2013-03-12T12:24:47.810 回答
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
于 2013-03-12T12:19:12.977 回答