2

1 つの 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 に答える