POWERSHELL: самый простой способ сохранить строковую переменную в файл csv - PullRequest
0 голосов
/ 29 мая 2020

Я немного разбираюсь в сценариях Bash, но я новичок в PowerShell. Когда я выполняю код ниже, используя bash, все в порядке. Но когда я использую PowerShell, каждая запись для каждого эха сохраняется только в одной ячейке в Excel. Почему это так? Как я могу sh достичь своей цели самым простым способом?

echo "1,2,3" > file.csv
echo "A,B,C" >> file.csv

НЕЖЕЛАТЕЛЬНОЕ:

enter image description here

ЖЕЛАТЕЛЬНОЕ:

enter image description here

Пробовал погуглить. Но, как я понимаю, они преобразуют переменные строкового типа во что-то вроде объекта PS и конвертируют в формат CSV. Я попробовал, и это сработало. Но мне пришлось принудительно включить заголовок.

New-Object -Type PSObject -Property @{
'X' = $A
'Y' = $B
'Z' = $C
} | Export-Csv 'C:\Temp\test.csv' -NoType

Когда я также открывал файл csv с помощью блокнота, каждое слово было заключено в двойные кавычки (которые я не предпочитаю иметь)

Видите ли, это намного сложнее по сравнению со сценарием Linux. Может ли кто-нибудь научить меня самому простому способу делать то, что я хочу? Спасибо большое!

1 Ответ

1 голос
/ 29 мая 2020

Если в вашей системной локали символ ListSeparator - это НЕ запятая, двойной щелчок по файлу csv с разделителями-запятыми откроет Excel со всеми значениями в том же столбце.

Я считаю вот что здесь происходит.

Вы можете проверить, набрав

[cultureinfo]::CurrentCulture.TextInfo.ListSeparator

в PowerShell.

Чтобы Excel «понимал» CSV при двойном щелчке по нему, добавьте -UseCulture переключиться на командлет:

Export-Csv 'C:\Temp\test.csv' -UseCulture -NoTypeInformation

Что касается кавычек вокруг значений:
Они не всегда необходимы, но иногда обязательно , например, если значение имеет начальные или конечные символы пробела, или если значение содержит сам символ разделителя.
Просто оставьте их как есть, Excel знает, как с этим справиться.

Если вы действительно не можете устоять перед наличием csv без кавычек, пожалуйста, сначала посмотрите ответы, приведенные здесь по этому вопросу.


Изменить

Если вы абсолютно уверен все поля могут обойтись без цитируя, вы можете сделать это:

$sep = [cultureinfo]::CurrentCulture.TextInfo.ListSeparator
"1,2,3", "A,B,C" -replace ',', $sep | Out-File -FilePath 'D:\Test\file.csv' -Encoding utf8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...