我需要确定批处理脚本中LocalDB安装版本最高的版本,并将整个版本字符串设置为变量。
sqllocaldb versions
产生一个像:
Microsoft SQL Server 2012 (11.0.5058.0) Microsoft SQL Server 2014 (12.0.2000.8)
版本字符串的顺序不一定是升序。需要一些帮助才能将最高服务器版本设置为变量(在此示例中为12.0.2000.8)。
答案 0 :(得分:1)
您需要调用该命令并使用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
然后使用IF 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!
答案 1 :(得分:1)
修改改进:无需辅助批处理脚本。下一个代码片段可以工作(注意适当的转义应用于内部循环):
@ECHO OFF
SETLOCAL enableextensions
echo show variables before
set _lastver
rem with an auxiliary batch script
>"%temp%\31110044.bat" ((for /f "tokens=1,2 delims=()" %%a in ('
sqllocaldb versions
') do @echo @set "_lastverCall=%%b")|sort)
call "%temp%\31110044.bat"
rem using two nested 'for /F' loops:
rem (note proper escaping applied to inner loop)
for /F "usebackq delims=" %%x in (`
^(for /f "tokens=1,2 delims=()" %%a in ^(^'
sqllocaldb versions
^'^) do @echo %%b^)^|sort
`) do set "_lastverForF=%%x"
echo show variables after
set _lastver
<强>输出强>:
==>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\31110044.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)
==>