【发布时间】:2017-08-11 22:57:45
【问题描述】:
我有一个 PowerShell 脚本,几乎可以满足我的需求。
基本上存在写入特定位置并按年和月存储的 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:找不到文件 '\16.1.1.18\c$\Scheduled Task Software\ScheduledTask\Application Files\ScheduledTask_1_0_0_9\Files\2017\3\SentFeedFiles\lkrlkr200317.csv lkrlkr19017.csv'。
我知道为什么会出现此错误 - 它试图将两个文件名连接到一个路径中。但是,我不知道如何解决这个问题。我在想可能需要一个循环,但我不确定在哪里。
【问题讨论】:
-
哪两个文件?只有目录中的前两个,按 LastAccessTime 排序?
-
是的。目录中最新的两个。目录将根据月份和年份而变化。
-
您有两个结果...所以将它们传送到 foreach 语句...在其中,对您调用的对象执行 CSVcount 或 $_ 如果您不命名它们。查看 powershell foreach 语句
-
您是否需要将这些文件实际视为 CSV(即,您之后是否要在此脚本中处理文件中的数据)?如果没有,那么
(Get-Content $file).Length会告诉你文件的行数。
标签: powershell csv