2015-08-28 79 views
0

我正在創建將解析語句並返回結果的通用腳本。我已經完成了shell,但不知道在批處理腳本中如何發生這種情況。批處理腳本將結果返回到變量

腳本1主腳本(main.bat)。

SET Myresult=CALL child.bat "Statement" 

現在Myresult應該存儲答案,無論我想在這個變量中返回什麼。

解決方案1:在Child.bat中設置Myresult並在main.bat中使用它,但現在如果用戶不知道變量名是什麼。

所以是他們重返象Java 回報XYZ

XYZ獲取其他地方調用語句捕獲的值的方式。

------------------------------- xxxxxxxxxxxxxxxxxxxxxxx -----------

PART 2

下面是我正在做的細節。

所謂孩子的腳本是getSQLResult.bat

什麼是確實是

getSQLResult.bat -q "Select a from abc" 

現在這上面的調用語句可以被任何人用於任何批處理腳本任何如何。

所以除了傳遞一個變量名(返回名稱)或者寫一個for循環來解析結果集之外,還有任何簡單的直接方法。

回答

0

這是做批量的方式:

for /f "delims=" %%a in ('echo hello world') do set myresult=%%a 
echo it returned: %myresult% 

echo hello world只是一個例子)

注:這隻會返回最後一個(或唯一的一行)。它可以被修改,以處理更多行,但你的例子所暗示的,有產出的只有一行)

編輯如果我理解你的編輯正確的,你想只是一個聲明傳遞給外部的批處理文件,它不該工作並將結果返回到由調用定義的變量中。

REM child.bat 
@echo off 
set var=%1 
for /f "tokens=1,*" %%i in ("%*") do (
    set var=%%i 
    set statement="%%~j" 
) 
for /f "delims=" %%a in ('getSQLResult.bat -q %statement%') do set "%var%=%%a" 

在使用它:

call child.bat result "Select a from abc" 
echo %result% 
當然,它仍然會返回最後一個(或唯一的一行)的

。可以很容易地修改以獲得第一行。如果輸出結果可能更多,我建議使用帶有計數器的「數組」來避免這些問題,MC ND地址在他對您的問題的評論中。也許使用多行輸出將文件名返回到文件可能是另一種解決方案。

0

選項1 - 通過變量名

爲主。蝙蝠

call child.bat myresult "Statement" 
echo %myresult% 

child.bat

set "%~1=argument was %~2" 

選項2 - 子進程的進程輸出

main.bat

for /f "delims=" %%a in ('child.bat "Statement"') do set "myresult=%%a" 
echo %myresult% 

child.bat

@echo off 
echo Argument was %~1 

或者您可以使用臨時文件,註冊表,剪貼板等來傳遞信息,但無論如何,如果您編碼的元素(您的child.bat)由您或他人重複使用,您在這個元素和其他代碼之間創建一個接口,一組預期的輸入參數和一種返回信息的方式。你的問題

......如果用戶不知道變量名稱是什麼?

由此界面的文檔回答。

+0

Thnks MC ND,但我的問題有點不同。請檢查編輯的問題part2 – jjames

+0

@jjames,我已經改變了修改。語句執行將從'0'到'n'輸出行產生。環境變量內容限制爲8191個字符。將結果存儲到變量中的選項不安全/強大/方便。最好的選擇是將語句執行從child發送到stdout,並在父級使用'for/f'來處理輸出。 –

相關問題