2013-10-05 64 views

回答

3

通常有一個命令的輸出存入一個變量兩種方式。我將假設只有一行輸出被捕獲。我還假設輸出是stdout,而不是stderr。該命令可以是調用批處理文件,調用批處理文件中的子例程,內部命令,標準外部命令(可執行文件)或第三方可執行文件 - 將輸出捕獲到變量中的過程是相同。

1)將輸出重定向到一個臨時文件,然後使用SET/P

call dateMath.bat %Date_Pattern% - 2 >output.tmp 
<output.tmp set /p "result=" 
del output.tmp 

典型地,該臨時文件在%TEMP%文件夾中創建讀出的值代入變量,但我在把一切當前目錄僅僅是爲了簡單。

人們通常喜歡儘可能避免臨時文件,儘管有時候這是最好的選擇。

2)使用FOR/F直接捕獲輸出,而不使用臨時文件。 FOR/F是一個複雜的命令,有很多選項。它旨在將輸入解析爲分隔符號。默認分隔符是一個空格;但是你希望整個字符串被捕獲到一個變量中。所以你需要將分隔符設置爲無。 FOR/F可以讀取文件內容,字符串或命令輸出。你需要命令輸出,所以IN()子句應該用單引號引起來。 @符號用於抑制SET命令行的回顯。

for /f "delims=" %A in ('dateMath.bat %Date_Pattern% - 2') do @set "result=%A" 

如果要在批處理腳本中使用上述命令,則FOR變量百分比需要加倍。你的腳本可能已經回顯,所以不需要@。

for /f "delims=" %%A in ('dateMath.bat %Date_Pattern% - 2') do set "result=%%A" 

有你可以採取完全不同的方法:修改你的批處理腳本直接選擇性地將結果存儲在變量。您應該從DosTips.com上閱讀以下優秀教程DOS Batch - Function Tutorial該網站經常提到DOS,但實際上它是一個專門處理Windows批處理腳本的所有內容的站點。

相關問題