ConvertTo-Csv Выход без кавычек

Я использую ConvertTo-Csv для получения разделенного запятой вывода

  get-process | convertto-csv -NoTypeInformation -Delimiter "," 

Он выводится следующим образом:

 "__NounName","Name","Handles","VM","WS","..... 

Однако я хотел бы получить вывод без кавычек, например

 __NounName,Name,Handles,VM,WS.... 

Вот способ удаления котировок

 get-process | convertto-csv -NoTypeInformation -Delimiter "," | % {$_ -replace '"',''} 

Но это имеет серьезный недостаток, если один из элементов содержит " он будет удален!

Сегодня я работал над столом и думал об этом самом вопросе, когда я просматривал файл CSV в блокноте и решил посмотреть, что другие придумали. Кажется, многие из них слишком усложнили решение.
Вот простой простой способ удалить отметки кавычек из файла CSV, сгенерированного командлетом Export-Csv в PowerShell.

Создайте файл TEST.csv со следующими данными.

“ID”, “Имя”, “государство”
“5”, “Стефани”, “Аризона”
“4”, “Мелани”, “Орегон”
“2”, “Кэти”, “Техас”
“8”, “Стив”, “Айдахо”
“9”, “Долли”, “Теннесси”

Сохранить как: TEST.csv

Хранить содержимое файла в переменной $ Test
$ Test = Get-Content. \ TEST.csv

Загрузить переменную $ Test, чтобы увидеть результаты командлета get-content
$ Test

Загрузите переменную $ Test снова и замените все («,») запятой, затем завершите начало и конец, удалив каждую метку кавычки
$ Test.Replace ( ‘ “”‘, “”). TrimStart ( ‘ ” ‘). TrimEnd (‘”‘)

Сохранить / Заменить файл TEST.csv
$ Test.Replace (‘”,”‘, “,”). TrimStart (” ‘). TrimEnd (‘ ”) | Out-File. \ TEST.csv -Force -Confirm: $ false

Проверка нового файла. Вывод с помощью Import-Csv и Get-Content:
Импорт-Csv. \ TEST.csv
Get-Content. \ TEST.csv

Суммировать все, работа может быть выполнена с помощью двух строк кода
$ Test = Get-Content. \ TEST.csv
$ Test.Replace (‘”,”‘, “,”). TrimStart (” ‘). TrimEnd (‘ ”) | Out-File. \ TEST.csv -Force -Confirm: $ false

Это довольно похоже на принятый ответ, но это помогает предотвратить нежелательное удаление «реальных» котировок.

 $delimiter = ',' Get-Process | ConvertTo-Csv -Delimiter $delimiter -NoTypeInformation | foreach { $_ -replace '^"','' -replace "`"$delimiter`"",$delimiter -replace '"$','' } 

Это сделает следующее:

  • Удалить кавычки, которые начинаются с строки
  • Удалить кавычки, которые заканчиваются строкой
  • Замените кавычки, которые ограничивают ограничитель только разделителем.

Следовательно, единственный способ, которым это пойдет не так, – это то, что в одном из значений фактически содержатся не только кавычки, но, в частности, последовательность цитат-разделитель-кавычка, которые, надеюсь, должны быть довольно необычными.

Я столкнулся с этой проблемой, нашел этот вопрос, но не был удовлетворен ответами, потому что все они страдают, если данные, которые вы используете, содержат разделитель, который должен оставаться указанным. Хорошая вещь избавиться от ненужных двойных кавычек.

Решение, приведенное ниже, решает эту проблему для общего случая и для всех вариантов, которые могут вызвать проблемы.

Я нашел этот ответ в другом месте, удалив цитаты из CSV, созданные PowerShell , и использовал его, чтобы составить пример ответа для сообщества SO.

Attribution: Кредит для регулярного выражения, идет на 100% в Russ Loski.

Код в функции, Remove-DoubleQuotesFromCsv

 function Remove-DoubleQuotesFromCsv { param ( [Parameter(Mandatory=$true)] [string] $InputFile, [string] $OutputFile ) if (-not $OutputFile) { $OutputFile = $InputFile } $inputCsv = Import-Csv $InputFile $quotedData = $inputCsv | ConvertTo-Csv -NoTypeInformation $outputCsv = $quotedData | % {$_ -replace ` '\G(?^|,)(("(?[^,"]*?)"(?=,|$))|(?".*?(? 

Тестовый код

 $csvData = @" id,string,notes,number 1,hello world.,classic,123 2,"a comma, is in here","test data 1",345 3,",a comma, is in here","test data 2",346 4,"a comma, is in here,","test data 3",347 "@ $data = $csvData | ConvertFrom-Csv "`r`n---- data ---" $data $quotedData = $data | ConvertTo-Csv -NoTypeInformation "`r`n---- quotedData ---" $quotedData # this regular expression comes from: # http://www.sqlmovers.com/removing-quotes-from-csv-created-by-powershell/ $fixedData = $quotedData | % {$_ -replace ` '\G(?^|,)(("(?[^,"]*?)"(?=,|$))|(?".*?(? 

Выход теста

 ---- data --- id string notes number -- ------ ----- ------ 1 hello world. classic 123 2 a comma, is in here test data 1 345 3 ,a comma, is in here test data 2 346 4 a comma, is in here, test data 3 347 ---- quotedData --- "id","string","notes","number" "1","hello world.","classic","123" "2","a comma, is in here","test data 1","345" "3",",a comma, is in here","test data 2","346" "4","a comma, is in here,","test data 3","347" ---- fixedData --- id,string,notes,number 1,hello world.,classic,123 2,"a comma, is in here",test data 1,345 3,",a comma, is in here",test data 2,346 4,"a comma, is in here,",test data 3,347 ---- e:\test.csv --- id,string,notes,number 1,hello world.,classic,123 2,"a comma, is in here",test data 1,345 3,",a comma, is in here",test data 2,346 4,"a comma, is in here,",test data 3,347 

Я не потратил много времени на поиск цитат. Но вот обходной путь.

 get-process | Export-Csv -NoTypeInformation -Verbose -Path $env:temp\test.csv $csv = Import-Csv -Path $env:temp\test.csv 

Это быстрый способ обхода проблемы, и может быть лучший способ сделать это.

Я обнаружил, что ответ Кори не работает для случая, когда исходная строка включала более одного пустого поля в строке. Т.е. «ABC», «0» было прекрасно, но «ABC», «0» не обрабатывалось должным образом. Он прекратил заменять кавычки после «,,,». Я исправил его, добавив « |(?) » ближе к концу первого параметра, например:

 % {$_ -replace ` '\G(?^|,)(("(?[^,"]*?)"(?=,|$))|(?".*?(?))', ` '${start}${output}'} 

В зависимости от того, насколько ваши данные CSV являются патологическими (или «полнофункциональными»), одно из опубликованных решений уже будет работать.

Решение, опубликованное Kory Gill, почти идеально – единственная проблема заключается в том, что кавычки удаляются также для ячеек, содержащих разделитель строк \r\n , что вызывает проблемы во многих инструментах.

Решение добавляет новую строку к выражению classа символов:

 $fixedData = $quotedData | % {$_ -replace ` '\G(?^|,)(("(?[^,"\n]*?)"(?=,|$))|(?".*?(? 
  • Использование PowerShell для записи файла в UTF-8 без спецификации
  • PowerShell периодически зависает после любой команды
  • Как я могу заменить каждое вхождение String в файл с помощью PowerShell?
  • Как получить get-childitem для фильтрации по нескольким типам файлов?
  • Лучший способ проверить, существует ли путь в PowerShell
  • Отключение звукового сигнала окна cmd
  • Удалить все файлы из папки и ее подпапок
  • Экспорт-CSV экспортирует длину, но не имя
  • Как разбить текстовый файл с помощью PowerShell?
  • Анализ xml с использованием powershell
  • Как использовать Powershell Remote через Интернет?
  • Interesting Posts

    Использование пользовательских токенов для отправки запросов REST в FB DB в качестве администратора

    Интеграция CFNetwork и Bonjour для интеграции iPhone и Mac

    Распаковка сенсорной панели ноутбука для очистки ключей

    Использование списка в качестве источника данных для DataGridView

    Использование делегата CALayer

    Всестороннее исследование типов вещей в «режиме» и «classе» и «типе» недостаточно

    Как отключить компьютер без обновления в Windows 7?

    Как я могу исправить компьютер, зараженный вредоносным ПО, и крайне не отвечает?

    Ошибка Entity Framework MySQL. Указанный поставщик хранилища не может быть найден в конфигурации или недействителен

    Android – создайте отдельные APK для разных процессорных архитектур

    Есть ли ярлык Windows 8 для отображения панели задач?

    Внешний жесткий диск неправильно распознан как внутренний жесткий диск

    Проверить скрипт оболочки, если удаленный TCP-порт открыт

    Какая настройка убедит меню Windows появляться справа, а не слева?

    Анализ JSON из данных успеха JQuery.ajax

    Давайте будем гением компьютера.