проверять имена в папке и удалять двойные кавычки в CSV с помощью цикла PowerShell
Я пытаюсь зациклить файлы в определенной папке и удалить в них двойные кавычки
кто-нибудь мог это объяснить, я сделал это:
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 ответа
Поскольку удалять все кавычки в существующих файлах 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
}
В 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 }