因此,我尝试处理CSV文件,然后为输出指定新名称。我可以通过显式指定文件名来处理一个文件。但是,有没有一种方法/通配符可以使脚本同时处理多个文件?假设我要使用.csv作为扩展名来处理任何内容。这是我用来处理特定文件的脚本
$objs =@();
$output = Import-csv -Path D:\TEP\FilesProcessing\Test\file1.csv | ForEach {
$Object = New-Object PSObject -Property @{
Time = $_.READ_DTTM
Value = $_.{VALUE(KWH)}
Tag = [String]::Concat($_.SUBSTATION,'_',$_.CIRCUITNAME,'_',$_.PHASE,'_',$_.METERID,'_KWH')
}
$objs += $Object;
}
$objs
$objs | Export-CSv -NoTypeInformation D:\TEP\FilesProcessing\Test\file1_out.csv
答案 0 :(得分:1)
您可以结合使用Get-ChildItem
和Import-Csv
。
下面是一个指定不同输入和输出目录以避免名称冲突的示例:
$inputPath = "D:\TEP\FilesProcessing\Test"
$outputPath = "D:\TEP\FilesProcessing\Output"
Get-ChildItem (Join-Path $inputPath "*.csv") | ForEach-Object {
$outputFilename = Join-Path $outputPath $_.Name
Import-Csv $_.FullName | ForEach-Object {
New-Object PSObject -Property @{
"Time" = $_.READ_DTTM
"Value" = $_.{VALUE(KWH)}
"Tag" = "{0}_{1}_{2}_{3}_KWH" -f $_.SUBSTATION,$_.CIRCUITNAME,$_.PHASE,$_.METERID
}
} | Export-Csv $outputFilename -NoTypeInformation
}
请注意,无需创建数组并重复附加它。只需输出所需的自定义对象,然后导出即可。
答案 1 :(得分:1)
使用Get-Childitem
并切出所有不必要的中间变量,以便以更Powershell类型的方式对其进行编码。像这样:
Get-CHhilditems 'D:\TEP\FilesProcessing\Test\*.csv' | % {
Import-csv $_.FullName | % {
New-Object PSObject -Property @{
Time = $_.READ_DTTM
Value = $_.{VALUE(KWH)}
Tag = '{0}_{1}_{2}_{3}_KWH' -f $_.SUBSTATION, $_.CIRCUITNAME, $_.PHASE, $_.METERID
}
} | Export-CSv ($_.FullName -replace '\.csv', '_out.csv') -NoTypeInformation
}
答案 2 :(得分:1)
Get-ChildItem在这种情况下非常有用。
您可以将通配符直接添加到路径中:
try {
WeatherAPI.Creater.newApiCreator().getopenweather(,WeatherAPI.WetherAPIKey)
.subscribeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe({});
} catch (Exception e) {
e.printStackTrace();
}
您可以递归路径并使用提供程序来过滤文件:
Get-ChildItem -Path D:\TEP\FilesProcessing\Test\*.csv
这应该可以满足您的需求。
Get-ChildItem -Path D:\TEP\FilesProcessing\Test\ -recurse -include *.csv
此外,在使用Powershell时,请避免执行以下操作:
$Props = @{
Time = [datetime]::Parse($_.READ_DTTM)
Value = $_.{VALUE(KWH)}
Tag = $_.SUBSTATION,$_.CIRCUITNAME,$_.PHASE,$_.METERID,'KWH' -join "_"
}
$data = Get-ChildItem -Path D:\TEP\FilesProcessing\Test\*.csv | Foreach-Object {Import-CSV -Path $_.FullName}
$data | Select-Object -Property $Props | Export-CSv -NoTypeInformation D:\TEP\FilesProcessing\Test\file1_out.csv