2017-03-20 116 views
0

我有一個PowerShell腳本,幾乎可以做我想做的事。在2個CSV文件中計數行進行比較

基本上有CSV文件提要寫入特定的位置並按年份和月存儲。我必須比較兩個最新的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'.

我知道爲什麼我得到這個錯誤 - 它試圖將兩個文件名加入到一個路徑中。但是,我不知如何解決這個問題。我想循環可能是必需的,但我不知道在哪裏。

+1

哪兩個文件?只是目錄中的前兩個,按LastAccessTime排序? – Spikeh

+0

是的。目錄中的兩個最新的。該目錄將根據月份和年份而變化。 – Ricky

+1

你有兩個結果......所以將它們管理到一個foreach語句......在那裏,在你調用這些對象的任何地方執行CSVcount,或者如果你沒有給它們命名,則執行$ __。看看powershell foreach statments –

回答

1

卡住3 CSV文件F:\ tmp目錄在本地進行測試:

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

($files | Get-Content).Count 

進口-CSV只有一個文件涉及至於我記得 - 所以你不能傳遞兩個文件路徑,它。

如果你想使用進口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

這似乎更好 - 但它似乎將兩者加在一起?我猜我會需要一個foreach循環,但不知道如何引用對象 – Ricky

+1

現在就整理它 – Spikeh

+0

不確定你的意思是將兩者加在一起?這不是你想要做的嗎?我的原始示例(排名第一)包含CSV標頭。 – Spikeh

相關問題