Powershell foreach循环获取csv文件并将其保存到其他文件夹

时间:2019-08-27 15:40:14

标签: powershell csv replace foreach

我试图读取一个文件夹中的多个csv,并尝试替换一些不需要的字符,并将其保存到另一个文件夹中的相同名称的另一个csv中。

我尝试使用foreach循环和ForEach-Object循环来动态生成目标文件名

#CSV's in folder (ABC.csv, DEF.csv)

param ( [String] $Filename))

$SourceFolderPath = Get-Childitem "C:\data\"
$DestinationFolderPath =  "C:\data\cleaned\"

$Source = $SourceFolderPath + $FileName
$Destination = $DestinationFolderPath + $Filename

ForEach ($f in $SourceFolderPath) {$F}
{

Import-Csv $f | ForEach-Object -Begin { $writeHeader = $True } {
  if ($writeHeader) { $writeHeader = $False; $_.psobject.properties.Name -join ',' }
  $_.psobject.properties.Value -replace ',', '' -replace '"', '' -join ','

} | set-Content $Destination

}

如果我手动传递$FileName = "ABC.csv",则代码正在运行。但是我需要它为文件夹中的所有文件动态地执行此操作。

1 个答案:

答案 0 :(得分:0)

因此,您希望从包含的逗号和
中清除所有列数据 还要从生成的csv文件中删除所有双引号?

我建议为参数字符串定义默认值,
因此,如果需要,您 可以提供其他值,但不必这样做。

该脚本暂时将分隔符更改为竖线|
因此这不应出现在文件内容中。

## Q:\Test\2019\08\27\SO_57678154.ps1

param ( [String] $Filename  = '*.csv',
        [String] $SourceDir = 'C:\Data\',
        [String] $TargetDir = 'C:\Data\cleaned\'
)

ForEach ($csvFile in Get-ChildItem -Path $SourceDir -Filter $Filename){
    (Import-Csv $csvFile | 
     ConvertTo-Csv -NoTypeInformation -Delimiter '|') -replace '[,"]' -replace '\|',',' |
         Set-Content (Join-Path $TargetDir $csvFile.Name)                  
}