проверять имена в папке и удалять двойные кавычки в CSV с помощью цикла PowerShell - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь l oop на файлах в указанной c папке и удалять в них двойные кавычки

кто угодно мог бы это объяснить, я сделал это:

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 \

Похоже, я был не в нужной папке, поэтому тупой

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

Поскольку удалять все кавычки в существующих файлах 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
    }
0 голосов
/ 03 августа 2020

В Powershell функции Get-Content и Set-Content ожидают полный путь. Переменная $_ - это объект FileInfo или DirectoryInfo. Попробуйте передать полный путь, используя $_.FullName, например:

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

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