检查文件夹中的名称并使用 powershell 循环删除 csv 中的双引号

check names in a folder and delete double quotes in a csv using a powershell loop

我正在尝试循环访问特定文件夹中的文件并删除其中的双引号

任何人都可以解释这个,我这样做了:

Get-ChildItem "c:\temp\test\" -filter SplitCSV* | 

    ForEach-Object {
    (Get-Content $_) -replace '(?m)"([^,]*?)"(?=,|$)', '' | Set-Content $_   }

出现此错误消息:

Get-Content : Impossible de trouver le chemin d'accès «
C:\Users\cptspinstalldev\SplitCSV_03-08-2020_9.csv», car il n'existe pas.

所以我将我的文件移动到 C:\Users\cptspinstalldev\ 并且它有效但为什么我的 get-childitems 没有在正确的文件夹中查找,即 c:\temp\test\

看来我不在正确的文件夹中,所以愚蠢

在 Powershell 中,Get-ContentSet-Content 函数需要完整路径。 $_ 变量是一个 FileInfoDirectoryInfo 对象。尝试使用 $_.FullName 传递完整路径,如下所示:

Get-ChildItem "c:\temp\test\" -filter SplitCSV* | 

ForEach-Object {
(Get-Content $_.FullName) -replace '(?m)"([^,]*?)"(?=,|$)', '' | Set-Content $_.FullName   }

由于删除现有 CSV 文件中的所有引号是不安全的,请考虑使用我的功能 ConvertTo-CsvNoQuotes 为您完成此操作。

在脚本之上添加该函数并执行:

Get-ChildItem -Path "c:\temp\test" -Filter 'SplitCSV*.csv' -File | 
    ForEach-Object {
        (Import-Csv -Path $_.FullName) | ConvertTo-CsvNoQuotes | Set-Content $_.FullName
    }

如果您使用的是 PowerShell 7.0,则可以不用该函数,只需编码为

Get-ChildItem -Path "c:\temp\test" -Filter 'SplitCSV*.csv' -File | 
    ForEach-Object {
        $file = $_.FullName
        (Import-Csv -Path $file) | Export-Csv -Path $file -UseQuotes AsNeeded
    }