2013-06-11 131 views
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(AAAAAAAA - BBBB - CCCC -DDDD-EEEEEEEEEEEE)並將其保存爲變量。它將始終採用相同數量的字符和破折號的格式。

回答

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% 
+0

是的,謝謝!我不知道爲什麼我沒有在for命令的任何文檔中看到「skip」參數。 – user2382144

0

首先要做的是確保您的SQLCMD輸出中包含某種您可以搜索的獨特文本。例如,你可以如下修改查詢:

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

然後通過添加編寫SQLCMD輸出到文件-o%OUTPUT_FILE%您SQLCMD.EXE線,其中%OUTPUT_FILE%早已已被定義。

然後使用組合爲的Findstr.exe拉開文件:

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

這還沒有測試過,但我知道理論是健全的。如果它不起作用,並且您正在努力修復它,請告訴我,我會花更多時間在它上面。