Пакетный файл Windows, маршрутный вывод EXE, вызванного в пакетном файле - PullRequest
0 голосов
/ 09 апреля 2019

В моем пакетном файле я вызываю EXE и хотел бы, чтобы вывод был перенаправлен в файл. В командной строке PowerShell это будет выглядеть примерно так:

prog.exe file.txt | Out-File results\results.txt -Encoding ascii

Вышеуказанное работает в командной строке. В моем командном файле я написал это так:

prog.exe file.txt | powershell -Command "Out-File results\file.txt -Encoding ascii"

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

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

полезный ответ Кичика показывает эффективное решение, использующее только функции пакетного файла.

Если вам не нужно создавать файлы с кодировкой , отличной от ASCII или активной кодовой страницей OEM, подключать PowerShell не нужно - это только замедлит работу.

Тем не менее, вы можете выбрать другую кодовую страницу через chcp в cmd.exe, но для вывода в файл только 65001 для UTF-8 действительно имеет смысл, но обратите внимание, что результирующий файл будет иметь нет спецификация - в отличие от использования Out-File -Encoding utf8 в Windows PowerShell.

Если вам нужно использовать PowerShell - например, для создания файлов UTF-16LE ("Unicode") или файлов UTF-8 с спецификацией - вам придется использовать $Input с PowerShell -внутренний канал в вашей команде PowerShell для доступа к потоку stdin (т. е. к тому, что было передано по каналу):

prog.exe file.txt | powershell -c "$Input | Out-File results\file.txt -Encoding ascii"

Обратите внимание, что только символы, представляемые в активной кодовой странице (как показано в chcp), будут распознаваться PowerShell и могут быть преобразованы в потенциально разные кодировки.

Выбор -Encoding ascii фактически транслитерирует символы вне (7-битного) диапазона ASCII до литерал ? символов, что приведет к потере информации .

1 голос
/ 09 апреля 2019

В пакетном файле должно работать следующее:

prog.exe file.txt > results\results.txt

Если вы хотите перенаправить stdout и stderr, используйте:

prog.exe file.txt > results\results.txt 2>&1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...