0

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

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

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

    ForEach-Object {
    (Get-Content $_) -replace '(?m)"([^,]*?)"(?=,|$)', '$1' | 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\

看起来我没有在正确的文件夹中所以愚蠢

4

2 回答 2

0

由于删除现有 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
    }
于 2020-08-03T12:21:12.720 回答
0

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

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

ForEach-Object {
(Get-Content $_.FullName) -replace '(?m)"([^,]*?)"(?=,|$)', '$1' | Set-Content $_.FullName   }
于 2020-08-03T12:14:25.377 回答