0

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

4

2 回答 2

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%
于 2013-06-11T21:13:22.543 回答
0

首先要做的是确保您的 SQLCMD 输出包含某种可以搜索的唯一文本。例如,您可以按如下方式修改查询:

"select 'FOO~' + AdmSiteID + '~' from [10.33.144.114].onesource.dbo.admsites where siteid='%sitecode%'"

然后通过将-o %OUTPUT_FILE%添加到已定义%OUTPUT_FILE %的 SQLCMD.EXE 行,将 SQLCMD 输出写入文件。

然后结合使用forfindstr.exe将文件分开:

for /f "tokens=2 delims=~" %%D in ('%SystemRoot%\System32\findstr.exe /l /c:"FOO~" %OUTPUT_FILE%') do set YOUR_VARIABLE=%%D

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

于 2013-06-11T21:04:36.963 回答