我正在处理批处理脚本,并尝试将命令的部分输出保存为变量。我当前的脚本要求用户输入站点代码(例如853),它接受该代码并使用它来查询sql数据库。我正在使用的命令如下:
sqlcmd -S"localhost\SQLONESOURCE" -Uusername -Pmypassword -dOneSource -Q"select AdmSiteID from [10.33.144.114].onesource.dbo.admsites where siteid='%sitecode%'"
当此命令运行时,我得到以下输出:
AdmSiteID
------------------------------------
AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE
(1 rows affected)
我只想采用AdmSiteID(AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE)并将其保存为变量。它将始终采用相同数量的字符和破折号。
答案 0 :(得分:2)
此批处理代码从sqlcmd输出获取第三行:
for /F "skip=2" %%a in ('sqlcmd -S"localhost\SQLONESOURCE" -Uusername -Pmypassword -dOneSource -Q"select AdmSiteID from [10.33.144.114].onesource.dbo.admsites where siteid='%sitecode%'"') do (
set thirdLine=%%a
goto continue
)
:continue
echo %thirdLine%
答案 1 :(得分:0)
要做的第一件事是确保您的SQLCMD输出包含您可以搜索的某种独特文本。例如,您可以按如下方式修改查询:
"select 'FOO~' + AdmSiteID + '~' from [10.33.144.114].onesource.dbo.admsites where siteid='%sitecode%'"
然后将 -o%OUTPUT_FILE%添加到SQLCMD.EXE行,将SQLCMD输出写入文件,其中%OUTPUT_FILE%已定义。
然后结合使用 for 和 findstr.exe 将文件分开:
for /f "tokens=2 delims=~" %%D in ('%SystemRoot%\System32\findstr.exe /l /c:"FOO~" %OUTPUT_FILE%') do set YOUR_VARIABLE=%%D
这尚未经过测试,但我知道理论是合理的。如果它不起作用,你正在努力修复它,请告诉我,我会花更多的时间在它上面。