Добавляет ли манипуляция с PowerShell строки ненужными символами? - PullRequest
2 голосов
/ 16 февраля 2012

Когда я помещаю содержимое моей переменной $ string в какой-то текстовый файл, это добавляет какой-то ненужный символ. Например, я пишу имя утилиты в строку и копирую эту строку в файл следующим образом.

$CodeCount+="ccount.exe"

$CodeCount | Out-file "C:\CodeCount.bat"

Когда я выполняю этот пакетный файл, он завершается неудачно, показывая спереди какой-то ненужный символ. enter image description here

Даже я попробовал с trim (), но результат все тот же.

Как избежать добавления нежелательного персонажа впереди?

Ответы [ 3 ]

8 голосов
/ 16 февраля 2012

Не используйте out-file, по крайней мере, в форме по умолчанию. Используйте set-content. Или явно установите кодировку в out-file что-то вроде out-file -encoding ascii. Out-file по умолчанию использует кодировку utf16 (на самом деле ucs-2), которая не рассматривается как обычный текст во многих приложениях (включая системы контроля версий, такие как Hg, Git) и добавляет «забавные» символы, которые вы упоминаете.

Обратите внимание, что перенаправление > совпадает с out-file и даст вам те же результаты.

2 голосов
/ 16 февраля 2012

Кодировка по умолчанию Out-File - Little Endian Unicode.cmd.exe плохо работает с этой кодировкой, поэтому просто используйте ASCII:

Out-File -Encoding ASCII

2 голосов
/ 16 февраля 2012

Это потому, что стандартная кодировка, используемая для Out-file, - это Unicode, которая добавляет некоторые значения спецификации в начале файла (вы можете увидеть эти значения при открытии файла в шестнадцатеричном редакторе). Чтобы избежать этих байтов, используйте -encoding ASCII:

$CodeCount | Out-file -encoding ascii "C:\CodeCount.bat"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...