【问题标题】:How to write STDOUT/STDIN via RedMon/cmd.exe to file?如何通过 RedMon/cmd.exe 将 STDOUT/STDIN 写入文件?
【发布时间】:2016-12-20 15:47:52
【问题描述】:

我正在尝试将 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
)

【问题讨论】:

  • “但是,批处理文件以某种方式改变了文件(跳过空行,忽略感叹号等等......)”——除非你不显示上述批处理文件,我们应该如何修复它?我猜你正在使用for /F 循环(跳过空行)和延迟扩展(失去感叹号)......
  • 感谢@aschipfl,实际上,我并没有要求修复我从 Stackoverflow 获得的不同变体的批处理脚本。相反,我想避免使用批处理脚本。好吧,只有当它不能直接工作时,我可能需要回到批处理脚本:-(。

标签: redirect cmd stdin redmon


【解决方案1】:

嗯,到目前为止,我还没有找到通过 RedMon 通过 CMD.exe 将 STDIN 写入文件的直接方法。正如@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 设置“打印到文件”的文件不同。我很确定在这两种情况下我可以设置的所有打印机设置都是相同的。 如果有人知道为什么会有差异,请告诉我。

【讨论】:

    猜你喜欢
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 2019-02-28
    相关资源
    最近更新 更多