Как записать STDOUT/STDIN через RedMon/cmd.exe в файл?
Я пытаюсь перенаправить вывод PS в файл и обработать его дальше. Для этого я использую перенаправление порта принтера RedMon, который отправляет вывод в CMD.exe
C:\Windows\system32\cmd.exe
В качестве аргументов я ожидал, что что-то вроде следующего должно работать, но это не так. "%1" содержит пользовательский ввод для имени файла.
/c >"%1"
или же
/c 1>"%1"
или же
/c |"%1"
или же
/c > "%1" 2>&1
Что почти работает, если я отправляю вывод в пакетный файл, который затем записывает его в файл.
/c WriteOutput.bat "%1"
Тем не менее, пакетный файл каким-то образом изменяет файл (пропуская пустые строки, игнорируя восклицательные знаки и т. Д.). Если возможно, я хочу избегать пакетного файла. Есть ли способ получить его "напрямую" в файл? Выбрать "Печать в файл" в настройках принтера не вариант для меня. Я хочу тот же конечный результат, но с помощью cmd.exe возможность обрабатывать его дальше. Есть идеи?
Редактировать: Ну, это командный файл, который я использовал. Он пренебрегает пустыми строками и пробелом в начале.
@echo off
setlocal
set FileName=%1
echo(>%FileName%.ps
for /F "tokens=*" %%A in ('more') do (
echo %%A>>%FileName%.ps
)
1 ответ
Ну, до сих пор я не нашел прямого способа записи STDIN через RedMon через CMD.exe в файл. Как писал @aschipfl, все версии с for /F
будет пропускать строки и игнорировать определенные символы.
Тем не менее, с помощью следующего пакетного скрипта (через RedMon) я получаю "правильно выглядящий" файл на диске.
C:\Windows\system32\cmd.exe /c WritePS.bat "%1"
"%1"
содержит пользовательский ввод для имени файла без расширения. Пакетный файл WritePS.bat
выглядит так просто, как это:
@echo off & setlocal
set FileName=%1.ps
more > "%FileName%"
Тем не мение,
Полученный файл Postscript отличается от файла, который я "Печатаю в ФАЙЛ" через настройку Postscript-Printer. Я уверен, что все настройки принтера, которые я могу установить, одинаковы в обоих случаях. Если у кого-то есть идея, почему может быть разница, пожалуйста, дайте мне знать.