[英]How to store the output of batch (CALL) command to a variable
我有批處理文件,該文件具有調用second.bat
文件的命令。 調用時將產生單行輸出。 我想將該行存儲到變量中。
CALL second.bat
我已經嘗試過使用以下幾行命令,但沒有用
FOR /F "tokens=* USEBACKQ" %%F IN ('COMMAND') do SET result=%%F
FOR /F "tokens=1 delims= " %%A IN ('COMMAND') DO SET NumDocs=%%A
我不知道該用COMMAND
替換什么
正如幫助將告訴您的那樣, COMMAND
應該是您要運行並獲取其輸出的命令。 因此,在您的情況下second.bat
。 至少對我有用:
@echo off
FOR /F "tokens=*" %%F IN ('second.bat') do SET result=%%F
echo %result%
請注意,如果使用'
來分隔命令,則不能使用usebackq
選項。
TL;博士
為了用兩個命令的固定版本來補充Joey的有用答案 (它解決了第一個命令的問題):
:: 'usebackq' requires enclosing the command in `...` (back quotes aka backticks)
FOR /F "tokens=* usebackq" %%F IN (`second.bat`) do SET result=%%F
:: No characters must follow "delims="; 'tokens=1' is redundant
FOR /F "delims=" %%F IN ('second.bat') DO SET result=%%F
請注意,在這種情況下,無需call
即可調用second.bat
(通常需要該文件才能繼續執行調用批處理文件),因為(...)
任何命令都在子 cmd.exe
運行cmd.exe
程序。
使您的第二個命令起作用的唯一需要做的就是在delims=
之后刪除delims=
:
FOR /F "tokens=1 delims=" %%F IN ('second.bat') DO SET result=%%F
delims=
-即不指定任何分隔符(分隔符) - 必須放置在選項字符串的結尾處 ,因為第二天字符總是解釋為一個分隔符,這是你的情況發生了什么:一個空間成了分隔符。
另外,您可以通過刪除tokens=1
來簡化命令,因為按照定義 , 在delims=
您僅獲得1個令牌(每行) ,即按原樣輸入整個輸入(行):
FOR /F "delims=" %%F IN ('second.bat') DO SET result=%%F
最后,值得注意的是, tokens=*
和delims=
之間存在細微的差別 :
delims=
(在選項字符串的最后) 按原樣返回輸入/每個輸入行。
tokens=*
從輸入中刪除前導定界符實例 ; 使用默認的定界符集-制表符和空格-裁剪前導空格 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.