String 批处理命令的管道
我想知道下一行的输出是什么。请给我解释一下每个符号。行是从批处理文件中提取的String 批处理命令的管道,string,windows,shell,batch-file,command,String,Windows,Shell,Batch File,Command,我想知道下一行的输出是什么。请给我解释一下每个符号。行是从批处理文件中提取的 'java-version 2^>^&1^ findstr/i“version”首先看一看有关Microsoft的文章 2>&1将写入错误输出流STDERR的错误消息重定向到标准输出流STDOUT。这将导致获得标准消息以及写入同一数据流的错误消息 打印版本时写入java.exe的STDOUT的标准消息和错误消息用作命令findstr的输入,方法是使用仅获取包含版本信息的行的输出,而忽略java.exe输出的所有其他行
'java-version 2^>^&1^ findstr/i“version”
首先看一看有关Microsoft的文章
2>&1
将写入错误输出流STDERR的错误消息重定向到标准输出流STDOUT。这将导致获得标准消息以及写入同一数据流的错误消息
打印版本时写入java.exe
的STDOUT的标准消息和错误消息用作命令findstr的输入,方法是使用
仅获取包含版本信息的行的输出,而忽略java.exe
输出的所有其他行
此命令显然嵌入到FOR循环中。因此,有必要使用^
对
和&
和|
进行转义,以使所有这些重定向运算符应用于执行java.exe
,而不是本身的命令,这将导致语法错误
打开一个命令提示符窗口,在那里运行java-version
,查看java输出的版本信息,如果命令处理器可以在当前目录中找到一个文件java.*
,该文件扩展名在当前目录的环境变量PATHEXT中列出,或者在环境变量PATH中列出一点也不
下一步在命令提示符窗口java-version | findstr/i“version”
中运行,查看在搜索包含字符串version
的行时findstr输出的命令
2>&1
在我看来,分别2^>^&1
是不必要的。可能这是在for循环中执行的,这就是为什么2^>^&1
是的,@npocmaka,我想也是这样,还有^
;特别是包含单引号的'
看起来像是命令行被for/F
循环解析…我在回答中已经写到,该命令显然是在for循环中使用的。但是我不理解2^>^&1
在获取Java版本时的用法。在我看来,如果cmd.exe
找不到在PathText中定义了文件扩展名的java.*
,使用2^>nul
就足以抑制命令处理器输出的错误消息。除了抑制错误消息之外,我看不到任何将错误消息重定向到标准消息流的真正原因。