2017-04-11 7 views
4

毎日、多くのクライアントからzipファイルが届きます。ファイル名は次の要素で構成されますフォルダ内のファイル名が見つからないことを検出します。

「データ」は常に同じテキストである
data_clientname_timestamp.zip 

、「CLIENTNAMEは」何と「タイムスタンプ」可能性があり、ファイルの作成日です。

ファイルは常に同じディレクトリにあります。クライアント名は常に事前にわかっているので、どのファイルを受け取るべきか分かります。

次の手順を実行しなければならないスクリプト:に「不足しているクライアントからファイルを..」すべてのファイルが受信

  • リスト1つまたは複数のクライアントからのファイルが欠落している場合、書き込み(作成)今日
  • ファイル
  • クライアントを変数にリストしたいので、簡単に変更できます。私がこれまで持って何

$folder='C:\data' 
Get-ChildItem $folder -recurse -include @("*.zip") | 
    Where-Object {($_.CreationTime -gt (Get-Date).Date)} | select name | out-file $folder\result.txt 

しかし、どのようにファイルを欠落しているファイルを確認するには?

編集: TESTDATA:

$Timestamp = (Get-Date).tostring(“yyyyMMddhhmmss”) 
New-Item c:\Data -type Directory 
New-Item c:\Data\Data_client1_$Timestamp.zip -type file 
New-Item c:\Data\Data_client2_$Timestamp.zip -type file 
New-Item c:\Data\Data_client3_$Timestamp.zip -type file 
New-Item c:\Data\Data_client5_$Timestamp.zip -type file 
New-Item c:\Data\Data_client6_$Timestamp.zip -type file 
New-Item c:\Data\Data_client7_$Timestamp.zip -type file 
exit 

スクリプト:よう

$folder='C:\Data' 
$clients = @("client1", "client2", "client3", "client4", "client5", "client6", "client7") 
$files = Get-ChildItem $folder -recurse -include @("*.zip") | 
    Where-Object {($_.CreationTime -gt (Get-Date).Date)} 

$files | Select-Object Name | Out-File $folder\result.txt 
$files | Where-Object { ($_.Name -replace '.+?_([^_]+).*', '$1') -notin $clients} | Out-File $folder\result2.txt 

答えて

2

あなたが必要client.csvという名前のCSVファイルのように、クライアントのリストをどこかに配置するには、そのリストをループして、クライアントごとにファイルが見つかるかどうかを調べることができます。たとえば、

+0

ありがとうマーク、私はまだこれもチェックしています。 – bRins

+0

ForEach-Objectループを使用して結果をファイルにパイプすることができるように私の答えを修正しました。 –

+0

不足しているファイルに関するメッセージを別のエラーファイルに書きたい場合は、その書き込み警告を 'add-content-valueue 'のように置き換えてください。$ Client is missing!" -path $ folder \ missing.txt' –

3

スタートクライアントのリストを定義すると、あなたが期待する:

$clients = @("client1", "client2") 

はその後、すべてのzipファイルを取得し、それを変数に保存します。

$files = Get-ChildItem $folder -recurse -include @("*.zip") | 
    Where-Object {($_.CreationTime -gt (Get-Date).Date)} 

エクスポートしますresult.txtに既存のファイル:

$files | Select-Object Name | Out-File $folder\result.txt 

今、あなたはクライアント名をつかむ正規表現でWhere-Objectコマンドレットを使用して、各欠落しているクライアントを決定することができます。

$fileClients = $files | ForEach-Object { ($_.Name -replace '.+?_([^_]+).*', '$1') } 
Compare-Object $clients $fileClients | select -ExpandProperty InputObject | Out-File $folder\result2.txt 
+0

私は、client4のファイルがないファイルclient1からclient7でフォルダが作成されています。 $ files |オブジェクト名の選択| Out-File $ folder \ result.txt これは今日の作成日のすべてのファイルを表示します $ files | Where-Object {($ _。Name -replace '。+?_([^ _] +)。*'、 '$ 1')-notin $ clients} | Out-File $ folder \ result2.txt result2.txtに "client4 missing"と表示されますが、result2は空です。 – bRins

+0

テストデータを提供する必要があります(ファイルを作成するスクリプトとそれを実行するスクリプト)それを再生する。それから私たちは答えを提供することができます。 –

+0

ありがとう、私はスクリプトで私の最初の投稿を編集しました。 – bRins

関連する問題