可以在不定义特定文件名的情况下使用Import-CSV cmd吗?

时间:2017-06-29 11:48:47

标签: powershell csv import

因此,在我目前的情况下,我将.csv文件移动到我想要执行脚本来解析.csv,删除特定数据以及仅使用提取的数据创建新文件的位置。

我的代码很好,一切正常。

但是现在我在使用生产中的数据文件时正在运行另一组UAT。这些.csv文件每天都会发送给我们,并加盖日期戳。

我最初使用text.csv编写了我的脚本,并希望按计划自动执行此脚本。但是现在我需要每次都定义csv文件吗?这是不可行的。

是否可以使用import-csv cmdlet让它只加载它在文件夹中看到的csv文件?

这是我的代码

Import-Csv "\\pg-app05\Micros\Scripted Data Extraction\Sales\" |Where 
{$_.SITEID -like "7*"} | Select 
SITEID,DATE,REVENUECENTER,OVERGROUP,UNITS,PRICE,NETT,VATRATE,VAT,GROSS | 
ConvertTo-CSV -NoTypeInformation | % {$_ -replace '"',""} |Out-File "\\pg-
app05\Micros\Scripted Data Extraction\Sales\sales_$(get-date -f 
yyyy_MM_dd)_NI.csv" -fo -en ascii

即使文件夹中只有一个CSV文件,也会返回错误。     SALES_27062017_090019.csv

这里应该只有一个文件存在,所以想知道是否可以使用powershell只加载csv文件,而不管文件名定义是什么?

我已经尝试了

Import-Csv "\\pg-app05\Micros\Scripted Data Extraction\Sales\*.csv"

虽然它给了我一个生成的输出文件,但它没有任何内容。

3 个答案:

答案 0 :(得分:2)

我认为你可以做到:

(Get-ChildItem "\\pg-app05\Micros\Scripted Data Extraction\Sales\*.csv").FullName | Import-Csv

因为Get-ChildItem接受其-Path参数的通配符参数。

您的尝试:

Import-Csv "\\pg-app05\Micros\Scripted Data Extraction\Sales\*.csv"

不起作用,因为-Path的{​​{1}}参数不接受通配符。

如果您想确保只返回1张CSV,则可以执行以下操作:

Import-CSV

答案 1 :(得分:2)

实际上,

Import-CSV 可以处理从多个CSV导入,但没有任何通配符处理。因此,您需要生成CSV列表 - 其中可能只包含一个CSV - 其他方式:

Import-CSV ((Get-ChildItem -Path "\\pg-app05\Micros\Scripted Data Extraction\Sales\*.csv").FullName)

应该有效,@ MarkWragg提出的解决方案

答案 2 :(得分:0)

感谢各位回复,感谢您的帮助。

所以这是我最终的切入,实现了我想要的目标

(Get-ChildItem "\\pg-app05\Micros\Scripted Data 
Extraction\Sales\*.csv").FullName | Import-Csv |Where {$_.SITEID -like "7*"} 
| Select 
SITEID,DATE,REVENUECENTER,OVERGROUP,UNITS,PRICE,NETT,VATRATE,VAT,GROSS | 
ConvertTo-CSV -NoTypeInformation | % {$_ -replace '"',""} |Out-File "\\pg-
app05\Micros\Scripted Data Extraction\Sales\sales_$(get-date -f 
yyyy_MM_dd)_NI.csv" -fo -en ascii

我现在正在获取一个生成的outfile,其中包含我需要的解析数据。随着更多的测试!