Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.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
Batch file 批处理以从行数中查找最高版本字符串_Batch File - Fatal编程技术网

Batch file 批处理以从行数中查找最高版本字符串

Batch file 批处理以从行数中查找最高版本字符串,batch-file,Batch File,我需要确定批处理脚本中安装的LocalDB的最高版本,并将整个版本字符串设置为一个变量 sqllocaldb版本生成一个输出,如: Microsoft SQL Server 2012 (11.0.5058.0) Microsoft SQL Server 2014 (12.0.2000.8) Microsoft SQL Server 2012(11.0.5058.0) Microsoft SQL Server 2014(12.0.2000.8) 版本字符串的顺序不一定是升序。需要一些帮助才能将最高

我需要确定批处理脚本中安装的LocalDB的最高版本,并将整个版本字符串设置为一个变量

sqllocaldb版本
生成一个输出,如:

Microsoft SQL Server 2012 (11.0.5058.0) Microsoft SQL Server 2014 (12.0.2000.8) Microsoft SQL Server 2012(11.0.5058.0) Microsoft SQL Server 2014(12.0.2000.8)
版本字符串的顺序不一定是升序。需要一些帮助才能将最高服务器版本设置为变量(在本例中为12.0.2000.8)。

您需要调用命令并解析返回的字符串,同时使用
FOR
命令和
set
命令

for /f "tokens=5" %%a in ('sqllocaldb versions') do (
  set verstr=%%a
  set verstr=!verstr:^(=!
  set verstr=!verstr:^)=!
然后使用另一个
FOR
命令将版本字符串解析为多个片段,并使用
SET/a
和简单算法计算版本号

for /f "tokens=1,2,3 delims=." %%b in ("!verstr!") do (
  set /a verval=%%b*1000000+%%c*1000+%%d
然后使用
如果GTR
命令将其与运行中的最大值进行比较

if !verval! gtr !highval! (
  set /a highval=!verval!
  set highest=!verstr!
)

所以,把所有的部分放在一起

@echo off
setlocal enabledelayedexpansion
set /a highval=0
for /f "tokens=5" %%a in ('sqllocaldb versions') do (
  set verstr=%%a
  set verstr=!verstr:^(=!
  set verstr=!verstr:^)=!
  for /f "tokens=1,2,3 delims=." %%b in ("!verstr!") do (
    set /a verval=%%b*1000000+%%c*1000+%%d
    if !verval! gtr !highval! (
      set /a highval=!verval!
      set highest=!verstr!
    )
  )
)
echo !highest!

编辑改进:无需辅助批处理脚本。下一个代码段可以工作(注意,正确的转义应用于内部循环):

输出

==>D:\bat\SO\31110044.bat
show variables before
Environment variable _lastver not defined
show variables after
_lastverCall=12.0.2000.8
_lastverForF=12.0.2000.8

==>
type“files\3111044.txt”
而不是
sqllocaldb versions
中使用虚构值进行调试:

==>type "files\31110044.txt"
MiniSoft SQL Server 2012 (11.0.5058.0)
MiniSoft SQL Server 2014 ( 2.0.2000.4)
MiniSoft SQL Server 2013 (11.0.5046.0)
MiniSoft SQL Server 2014 (12.0.2000.8)
MiniSoft SQL Server 2014 (11.0.4046.6)

==>
==>type "files\31110044.txt"
MiniSoft SQL Server 2012 (11.0.5058.0)
MiniSoft SQL Server 2014 ( 2.0.2000.4)
MiniSoft SQL Server 2013 (11.0.5046.0)
MiniSoft SQL Server 2014 (12.0.2000.8)
MiniSoft SQL Server 2014 (11.0.4046.6)

==>