Синтаксическая ошибка в команде powershell в windows - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь запустить две команды в файле bat с помощью powershell. Моя цель - преобразовать файл в формат utf8. Как я могу этого достичь?

Вот что у меня есть:

PowerShell -Command (Get-Content 'ZipCode.csv' | Out-File 'ZipCode1.csv' -Encoding utf8)

Я получаю следующую ошибку: «out-file не распознается как внутренняя или внешняя команда»

Ответы [ 2 ]

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

Если вы используете только Out-File, потому что ваша версия PowerShell не включает параметр -Encoding с Set-Content, тогда она должна выглядеть следующим образом:

@"%__AppDir__%WindowsPowerShell\v1.0\powershell.exe" -NoProfile -Command "Get-Content -Path '.\ZipCode.csv' | Out-File -FilePath '.\ZipCode1.csv' -Encoding UTF8"

Очевидно, что если у вас есть Версия PowerShell, где Set-Content имеет обязательную опцию -Encoding, используйте ее вместо:

@"%__AppDir__%WindowsPowerShell\v1.0\powershell.exe" -NoProfile -Command "Get-Content -LiteralPath 'ZipCode.csv' | Set-Content -LiteralPath 'ZipCode1.csv' -Encoding UTF8"


Очевидно, что они могут быть сокращены, чтобы удалить надежность и использовать псевдонимы / сокращения:
@PowerShell -NoP "GC '.\ZipCode.csv'|Out-File '.\ZipCode1.csv' -E UTF8"
@PowerShell -NoP "GC -LP 'ZipCode.csv'|SC -LP 'ZipCode1.csv' -En UTF8"

Я предпочитаю использовать -LiteralPath, потому что у меня есть тенденция использовать [] в именовании моих файлов, и это может быть проблематично c в именах файлов. Измените имя выходного файла на ZipCode[1], затем попробуйте код версии -Set-Content с -Path или ничего вместо опции -LiteralPath / -LP, и вы поймете, что я имею в виду.

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

Двойные кавычки кажутся достаточными, чтобы убежать от трубы. Одинарные кавычки снаружи не сработают.

PowerShell "Get-Content ZipCode.csv | Out-File ZipCode1.csv -Encoding utf8"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...