将输出保存为变量

时间:2013-06-11 20:31:27

标签: windows variables batch-file scripting

我正在处理批处理脚本,并尝试将命令的部分输出保存为变量。我当前的脚本要求用户输入站点代码(例如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)并将其保存为变量。它将始终采用相同数量的字符和破折号。

2 个答案:

答案 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

这尚未经过测试,但我知道理论是合理的。如果它不起作用,你正在努力修复它,请告诉我,我会花更多的时间在它上面。