Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 批处理命令的管道_String_Windows_Shell_Batch File_Command - Fatal编程技术网

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
就足以抑制命令处理器输出的错误消息。除了抑制错误消息之外,我看不到任何将错误消息重定向到标准消息流的真正原因。