Batch file 相当于sed命令的Windows cmd

Batch file 相当于sed命令的Windows cmd,batch-file,cmd,Batch File,Cmd,我正试图编写一个cmd脚本,从java-fullversion命令解析java版本。我可以检索这样的版本:1.6.0\u 45,1.7.0\u 60,1.8.0\u 212,11.0.4。我想返回版本为6,7,11。正如你所看到的,并不是所有这些都出现在第一个点之前 我发现以下sed命令有效,并希望了解与windows cmd等效的命令: sed '/^1\./s///' 这有几个部分,其中有些部分做起来不太好: 在变量中获取Java的输出 for /f tokens^=2^ delims^=

我正试图编写一个cmd脚本,从
java-fullversion
命令解析java版本。我可以检索这样的版本:
1.6.0\u 45
1.7.0\u 60
1.8.0\u 212
11.0.4
。我想返回版本为
6
7
11
。正如你所看到的,并不是所有这些都出现在第一个点之前

我发现以下sed命令有效,并希望了解与windows cmd等效的命令:

sed '/^1\./s///'

这有几个部分,其中有些部分做起来不太好:

  • 在变量中获取Java的输出

    for /f tokens^=2^ delims^=^" %%v in ('java -fullversion 2^>^&1') do set "version=%%v"
    
    这只保留引号之间的部分,在我的例子中是
    11.0.4+11

  • sed
    类部件,非常简单:

    if "%version:~0,2%"=="1." set version=%version:~2%
    
    基本上只是“如果前两个字符是
    1.
    ,请将它们切掉”

  • 从第一个
    开始切断所有内容:

    for /f "tokens=1 delims=." %%v in ("%version%") do set version=%%v
    
    这再次使用
    for/f
    进行解析和标记化,并且只保留第一个标记

  • 通常,现在您也可以使用PowerShell:

    "$(java -fullversion 2>&1)" -replace '.*?([\d.]+).*','$1' -replace '^1\.'
    #  ^^^^^^^^^^^^^^^^^^^^^^   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^
    #   Invoke Java and          Replace everything but the    sed equivalent
    #   capture stderr           version
    

    @Martin可能重复,但这并不是这个问题的真正答案。这是关于尝试执行与
    cmd
    中的特定
    sed
    命令相同的操作,而不是查找执行此操作的其他工具。