在FOR循环中使用IF,在CMD中使用管道内容

SYOB SYOT

我正在编写一个批处理安装程序,并且在安装过程中必须检查java的版本。为此,我在批处理中使用以下代码:

JAVA -version 2>&1 | FOR /F "USEBACKQ TOKENS=2 DELIMS=." %A IN (`FIND "VERSION" /I`) DO (IF 2 EQU 2 ECHO INSIDE IF STATEMENT.)

但是由于某种原因这不起作用,会出现以下错误消息:

2 was unexpected at this time.

如果我不管道命令FOR循环然后IF执行命令。如果我在管道输送时放在ECHO外面IF,并且不使用IFECHO则会被执行。

因此,出于某种原因,管道和IF命令的组合不起作用。我应该怎么办?

阿希普

不幸的是,我无法解释为什么它不起作用(我收到了2 was unexpected at this time.);但猜测它有事情做的事实,IF就是命令(FORIFREM)由命令解释看起来比所有其他人早CMD,与事实管道(一起|)初始化新的CMD情况下任何一方。

但是,有一些选择:

  1. JAVA命令也放入FOR /F循环中:

    FOR /F "USEBACKQ TOKENS=2 DELIMS=." %A IN (`JAVA -version 2^>^&1 ^| FIND "version" /I`) DO (IF 2 EQU 2 ECHO INSIDE IF STATEMENT.)
    
  2. 使用一个临时文件:

    1. FOR /F循环中读取临时文件

      JAVA -version > "%TEMP%\file.tmp" 2>&1
      FOR /F "USEBACKQ TOKENS=2 DELIMS=." %A IN (`^< "%TEMP%\file.tmp" FIND "version" /I`) DO (IF 2 EQU 2 ECHO INSIDE IF STATEMENT.)
      DEL "%TEMP%\file.tmp"
      
    2. FOR /F循环外读取临时文件

      JAVA -version > "%TEMP%\file.tmp" 2>&1
      < "%TEMP%\file.tmp" (FOR /F "USEBACKQ TOKENS=2 DELIMS=." %A IN (`FIND "version" /I`) DO (IF 2 EQU 2 ECHO INSIDE IF STATEMENT.))
      DEL "%TEMP%\file.tmp"
      
  3. CMD显式包装另一个实例以从IF命令中隐藏管道

    JAVA -version 2>&1 | CMD /C FOR /F "USEBACKQ TOKENS=2 DELIMS=." %A IN (`FIND "VERSION" /I`) DO (IF 2 EQU 2 ECHO INSIDE IF STATEMENT.)
    

奇怪的发现:

  • 史蒂芬(Stephan)发现了另一种解决方法:使用比较运算符==代替EQU-参见他的评论但这不再允许进行真正的数字整数比较:

    JAVA -version 2>&1 | FOR /F "USEBACKQ TOKENS=2 DELIMS=." %A IN (`FIND "VERSION" /I`) DO (IF 2 == 2 ECHO INSIDE IF STATEMENT.)
    
  • 当您(至少)转义bySPACE后面IF(至少)时^,命令行意外起作用:

    JAVA -version 2>&1 | FOR /F "USEBACKQ TOKENS=2 DELIMS=." %A IN (`FIND "VERSION" /I`) DO (IF^ 2 EQU 2 ECHO INSIDE IF STATEMENT.)
    
  • REM/ ^&立即插入以下内容IF

    JAVA -version 2>&1 | FOR /F "USEBACKQ TOKENS=2 DELIMS=." %A IN (`FIND "VERSION" /I`) DO (REM/ ^& IF 2 EQU 2 ECHO INSIDE IF STATEMENT.)
    

还要看一下这个非常有趣的相关线程:管道传递给IF命令时会发生什么?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在for循环中使用for循环生成包含内容的行

来自分类Dev

如何在Handlebars循环中使用{{this}}访问数组内容?

来自分类Dev

在循环中使用cvtColor

来自分类Dev

Python在FOR循环中使用IF

来自分类Dev

在for循环中使用if语句

来自分类Dev

在for循环中使用Groupby

来自分类Dev

在循环中使用NSDecimalNumber?

来自分类Dev

在For循环中使用Grep

来自分类Dev

在循环中使用sed

来自分类Dev

在for循环中使用if语句

来自分类Dev

在 for 循环中使用逗号

来自分类Dev

在循环中使用循环进行编号

来自分类Dev

在foreach循环中使用for循环值

来自分类Dev

C:在双循环中使用 getchar() - 卡在循环中?

来自分类Dev

绘图无法在for循环中使用

来自分类Dev

在并行foreach循环中使用source()

来自分类Dev

在for循环中使用'tar'命令

来自分类Dev

在增强的for循环中使用类

来自分类Dev

何时在if循环中使用-f或-a标记

来自分类Dev

在for循环中使用geom_segment()?

来自分类常见问题

避免在for循环中使用if语句?

来自分类常见问题

在循环中使用随机矩阵(R)

来自分类Dev

在while循环中使用Scala延续

来自分类Dev

在fortran循环中使用指针变量

来自分类Dev

在for循环中使用大于号

来自分类Dev

在For循环中使用try / catch

来自分类Dev

JavaScript函数无法在for循环中使用

来自分类Dev

在while循环中使用if语句

来自分类Dev

在foreach循环中使用Parallel :: ForkManager