我想將帶參數的批處理腳本的輸出分配給變量。請告訴我如何做到這一點。如何將包含要輸出的變量的命令重定向到Windows命令行上的變量
示例: datemath.bat %Date_Pattern% - 2
的輸出應分配給一個變量。
說我date_pattern
爲2013 05 03
,然後我的變量會拿出2013 05 01
我想將帶參數的批處理腳本的輸出分配給變量。請告訴我如何做到這一點。如何將包含要輸出的變量的命令重定向到Windows命令行上的變量
示例: datemath.bat %Date_Pattern% - 2
的輸出應分配給一個變量。
說我date_pattern
爲2013 05 03
,然後我的變量會拿出2013 05 01
通常有一個命令的輸出存入一個變量兩種方式。我將假設只有一行輸出被捕獲。我還假設輸出是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批處理腳本的所有內容的站點。
瞭解[PowerShell](http://technet.microsoft.com/en-us/library/bb978526.aspx)。 –