Redirect 如何通过RedMon/cmd.exe将STDOUT/STDIN写入文件?

Redirect 如何通过RedMon/cmd.exe将STDOUT/STDIN写入文件?,redirect,cmd,stdin,redmon,Redirect,Cmd,Stdin,Redmon,我正在尝试将PS输出重定向到一个文件并进一步处理它。 为此,我使用打印机端口重定向RedMon,它将输出发送到CMD.exe C:\Windows\system32\cmd.exe 作为论据,我希望下面这样的东西能起作用,但事实并非如此1包含文件名的用户输入 /c >"%1" 或 或 或 如果我将输出发送到一个批处理文件,然后该批处理文件将其写入一个批处理文件,那么该方法几乎可以起作用 /c WriteOutput.bat "%1" 然而,批处理文件以某种方式改变了文件,跳过了空行,

我正在尝试将PS输出重定向到一个文件并进一步处理它。 为此,我使用打印机端口重定向RedMon,它将输出发送到CMD.exe

C:\Windows\system32\cmd.exe
作为论据,我希望下面这样的东西能起作用,但事实并非如此1包含文件名的用户输入

/c >"%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
)

到目前为止,我还没有找到一种通过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打印机设置打印到文件的文件不同。我敢肯定,在这两种情况下,我可以设置的所有打印机设置都是相同的。
如果有人知道为什么会有差异,请告诉我。

但是,批处理文件以某种方式改变了文件,跳过了空行,忽略了感叹号等…-除非您不显示所述批处理文件,否则我们应该如何修复它?我猜您正在使用for/F循环跳过空行和延迟扩展丢失感叹号…谢谢@aschipfl,好吧,实际上,我并没有要求修复从Stackoverflow获得的不同变体中的批处理脚本。相反,我希望避免使用批处理脚本。好的,只有当它不能直接工作时,我可能需要回到批处理脚本:-。
@echo off
setlocal
set FileName=%1
echo(>%FileName%.ps
for /F "tokens=*" %%A in ('more') do (
    echo %%A>>%FileName%.ps
)
C:\Windows\system32\cmd.exe /c WritePS.bat "%1"
@echo off & setlocal
set FileName=%1.ps
more > "%FileName%"