我正在Windows CMD.EXE
环境中工作,并希望更改输出stdout
以匹配,stderr
以便我可以将错误消息传递给其他程序,而无需文件的中介.
我知道的2>&1
符号,而是结合stdout
并stderr
成一个单一的数据流.
我在想的是这样的:
program.exe 2>&1 | find " "
Run Code Online (Sandbox Code Playgroud)
但这结合了stdout和stderr就像:
program.exe | find " " 2>&1
Run Code Online (Sandbox Code Playgroud)
我意识到我能做到......
program 2>file
type file | find " "
del file
Run Code Online (Sandbox Code Playgroud)
但这并不具备program | find " "
某种符号的灵活性和强大功能.这样做需要program
在输出完成之前完成输出.
我正在运行Windows 7 Ultimate x64,但我的经验可以追溯到DOS 3.0.
因为像DOS 3.1一样,你可以使用COPY命令将文件附加到另一个文件:
COPY FILE1+FILE2=FILE1
Run Code Online (Sandbox Code Playgroud)
需要一个临时的FILE3是不必要的.
这是因为,只要你加入,你经常需要更新您的一个新的程序非常方便的命令CONFIG.SYS
和AUTOEXEC.BAT
文件.
它也曾经是得到正确的订单是重要的,否则你最终会得到一个空的FILE1.
但是今天当我尝试的时候,它FILE1
没有动过,当我颠倒了命令时,它(可以理解地)制作FILE1
了一份副本FILE2
.
有谁知道它是否被其他方法取代,何时发生这种变化?
编辑:
我一直在做更多的测试,奇怪的是即使上面的代码不起作用,你仍然可以从控制台复制并将其附加到现有文件,如下所示:
copy file1+con=file1
Type some text to append to file1
^Z ([CTRL]+Z the End Of File character)
Run Code Online (Sandbox Code Playgroud)
我想知道我的Windows版本是否以某种方式搞砸了.任何人都可以复制我的发现吗?
编辑:
它适用于95/98/ME/2000/XP/XP Mode/7 Professional x64/8 x64.所以我想这不是7 Ultimate x64
问题,而是我机器的问题.
*叹气*
编辑:
最后编辑,我保证.:)
这不是我的机器的问题,这是File1的一个问题.显然当我第一次将File2附加到它时,[CTRL] + Z(EOF字符)从未被覆盖,导致文件看起来像这样:
Original Data
Original Data
[EOF]
Appended Data
Appended Data
Appended Data
Run Code Online (Sandbox Code Playgroud)
您可以在命令提示符处使用以下实验自行复制此项.(其中^ Z是字符[CTRL] + Z)
在命令提示符下键入:
copy con file1
File …
Run Code Online (Sandbox Code Playgroud) 我试图从环境变量字符串中删除星号,但似乎无法做到.
我正在创建一个基于搜索字符串的m3u文件,所以例如如果我想制作一个m3u文件,其中包含每个包含爱字的歌曲,我会输入:
m3u *Love*
Run Code Online (Sandbox Code Playgroud)
并且m3u.bat将创建该文件:
xLovex.m3u
Run Code Online (Sandbox Code Playgroud)
但是替换字符的常规方法不适用于星号.(虽然我对问号没有这个问题.)
set nam=%nam:*=x%.m3u
Run Code Online (Sandbox Code Playgroud)
而是创建文件名
x.m3u
Run Code Online (Sandbox Code Playgroud)