2017-03-20 10 views
0

ほとんどのPowerShellスクリプトがあります。比較のために2つのCSVファイルの行数を計算する

基本的に、特定の場所に書き込まれ、年および月ごとに保存されるCSVファイルフィードがあります。大規模な不一致が問題を示しているので、2つの最新のCSVファイル間の行数を比較する必要があります。

現在のところ、私のスクリプトは最新のCSVファイルを取り出して問題なく行数を返しますが、2つの最新ファイルの行数を返す方法を見つけることはできません。それが原因私は、スクリプトを構造化しまし方法に思われる:

$datemonth = (Get-Date).Month 
$dateyear = (Get-Date).Year 

## get latest csv files 
$dir = "\\160.1.1.98\c$\Scheduled Task Software\ScheduledTask\Application Files\ScheduledTask_1_0_0_9\Files\$dateyear\$datemonth\SentFeedFiles" 
$latest = Get-ChildItem -Path $dir | 
      Sort-Object LastAccessTime -Descending | 
      Select-Object -First 1 

## get path to csv files, add headers and count number of rows. 
$filepath = $dir + '\' + $latest 

$CSVCOUNT = (Import-Csv $filepath -Header 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28).Count 

私は-First 2に変更すると、私は次のエラーを取得する:

Import-Csv : Could not find file '\16.1.1.18\c$\Scheduled Task Software\ScheduledTask\Application Files\ScheduledTask_1_0_0_9\Files\2017\3\SentFeedFiles\lkrlkr200317.csv lkrlkr19017.csv'.

私はこのエラーを取得していますなぜ私が知っています - 2つのファイル名を1つのパスに結合しようとしています。しかし、私はこれを回避する方法を失っています。私はループが必要かもしれないと思っていますが、私はどこにいるのかわかりません。

+1

2つのファイルはどちらですか? LastAccessTimeで注文されたディレクトリの最初の2つだけ? – Spikeh

+0

はい。ディレクトリ内の2つの最新のもの。ディレクトリは月と年によって変わります。 – Ricky

+1

あなたは2つの結果を持っています。そのため、foreach文にパイプしてください...そこにある間は、それらのオブジェクトと呼ぶものにCSVcountを実行するか、名前を付けない場合は$ _を実行します。 powershell foreach文章を参照してください –

答えて

1

はFで3つのCSVファイルをチャッキング:TMP \ローカルでのテストに:

$dir = "F:\tmp" 
$files = Get-ChildItem -Path $dir | Sort-Object LastAccessTime -Descending | Select-Object -First 2 

($files | Get-Content).Count 

インポート、CSVだけ私が覚えている限りでは、単一のファイルを扱う - あなたはそれに2つのファイルのパスを渡すことはできません。

あなたは(ヘッダなどを無視する)インポート、CSVを使用する場合は、ファイルをforeachのことができますが、あなたはそれに完全なパスを渡すことがあります。

($files.FullName | % { Import-Csv -Path $_ }).Count 

二つの別々の結果を得るために、か次

は、ヘッダーを含める:

($files[0] | Get-Content).count 
($files[1] | Get-Content).count 

は、ヘッダーを除外:

(Import-Csv -Path $files[0].FullName).Count 
(Import-Csv -Path $files[1].FullName).Count 
+0

それは良いようです - しかし、2つを一緒に追加するようですか?私はforeachループが必要だと推測していますが、オブジェクトを参照する方法がわからない – Ricky

+1

今すぐ並べ替えてください – Spikeh

+0

2つを一緒に追加することで何を意味するのかよくわかりませんか?それはあなたがやろうとしていることではありませんか?私の元の例(一番上の例)にはCSVヘッダーが含まれていました。 – Spikeh

関連する問題