Как прочитать каждый CSV-файл в папке и удалить символ кавычки из CSV-файла? - PullRequest
2 голосов
/ 05 апреля 2020

Как я могу прочитать каждый CSV-файл в указанной папке c? Когда приведенный ниже скрипт выполняется, он удаляет только кавычки одного файла CSV.

$file="C:\test\IV-1-2020-04-02.csv"

(GC $file) | % {$_ -replace '"', ''}  > $file

Get-ChildItem -Path C:\test\  -Filter '*.csv'

Вывод только удалит символ кавычки "IV-1-2020-04-02.csv". Что если у меня другое имя файла?

1 Ответ

1 голос
/ 05 апреля 2020

Вы можете перебирать каждый .csv файл из Get-ChildItem и replace кавычек " с '', используя Set-Content ,

$files = Get-ChildItem -Path "YOUR_FOLDER_PATH" -Filter *.csv

foreach ($file in $files)
{
    Set-Content -Path $file.FullName -Value ((Get-Content -Path $file.FullName -Raw) -replace '"', '')
}

Обязательно укажите путь к папке на -Path, который сообщает Get-ChildItem, что нужно извлечь каждый файл из этой папки

Это также быстрее , чтобы использовать переключатель -Raw для Get-Content, поскольку он считывает файл в одну строку и сохраняет символы новой строки. Если вы опустите этот переключатель, Get-Content по умолчанию разделит строки по символам новой строки в массив строк

Если вы также хотите читать файлы в более глубоких подкаталогах, затем добавьте переключатель -Recurse к Get-ChildItem:

$files = Get-ChildItem -Path "YOUR_FOLDER_PATH" -Filter *.csv -Recurse

Кроме того, вы также можете использовать Foreach-Object здесь:

Get-ChildItem -Path "YOUR_FOLDER_PATH" -Filter *.csv -Recurse | ForEach-Object {
    Set-Content -Path $_.FullName -Value ((Get-Content -Path $_.FullName -Raw) -replace '"', '')
}

Кроме того, вы может заменить Foreach-Object его псевдонимом %. Однако, если вы используете VSCode и включили PSScriptAnalyzer, вы можете получить это предупреждение:

'%' является псевдонимом 'ForEach-Object'. Псевдоним может привести к возможным проблемам и усложнить поддержку сценариев. Пожалуйста, рассмотрите возможность изменения псевдонима на его полный контент.

, который предупреждает против использования псевдонимов для удобства обслуживания. Гораздо безопаснее и удобнее использовать полную версию. Я использую псевдонимы только для быстрого использования командной строки, но при написании сценариев я использую полные версии.

Примечание: Приведенные выше решения могут привести к повреждению CSV, если некоторые строки будут заключены в кавычки. Это решение просто просматривает весь файл и заменяет каждую цитату на ''. PowerShell 7 предлагает опцию -UseQuotes AsNeeded для Export-Csv, так что вы можете рассмотреть это вместо этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...