Powershell выводит пакетный файл, который не будет работать - PullRequest
1 голос
/ 10 мая 2019

Я написал скрипт Powershell, который позволяет пользователю выбирать что-то из списка.Затем он объединяется с кодом для пакетного файла, который затем выводится.Это все работает отлично, код, который находится в пакетном файле, верен, он правильно сохраняется как пакетный файл, но когда я запускаю его, дважды щелкнув по пакетному файлу, он на секунду мигает на экране, а затем исчезает безвыполнение того, что он должен был сделать.

Тем не менее, если я скопирую и вставлю тот же текст в блокнот, сохраню как одну и ту же вещь и дважды щелкну по ней, она выполнится правильно.Как я могу это исправить?

Пробное копирование и вставка содержимого командного файла в блокнот и сохранение как test.bat - что затем работает нормально.

if ($result -eq [System.Windows.Forms.DialogResult]::OK) {
$x = $listBox.SelectedItem
$out = "@echo off ........."
$out | Out-File -FilePath C:\temp\test.bat
}

Вместо выполнения командного файла он просто на мгновение мигает на экране.

Что должно произойти, если командный файл выполняет код в своем сценарии.Пакетный файл имеет как паузу, так и тайм-аут, он также не может выполнить задачу, которую должен.

1 Ответ

0 голосов
/ 11 мая 2019

Lee_Daily предоставил критический указатель в комментарии:

Out-File>) по умолчанию создает файлы Unicode в Windows PowerShell [1] , т. Е. UTF-16LE -кодированные файлы, которые cmd.exe оболочка, обрабатывающая командные файлы, не понимает.

cmd.exe ожидает файлы OEM -кодированные, то есть кодовую страницу OEM, связанную с активным (устаревшим) языковым стандартом системы. (OEM кодовые страницы являются 8-битными надмножествами 7-битной кодировки ASCII).

Следовательно, вы должны использовать -Encoding Oem для создания командного файла:

$out = "@echo off ........."
$out | Out-File -Encoding Oem -LiteralPath C:\temp\test.bat

Поскольку вы выводите строки , вы также можете использовать Set-Content, что немного более эффективно.


[1] В кроссплатформенной версии PowerShell Core более разумным по умолчанию является UTF-8 (без спецификации).

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