簡體   English   中英

如何將批處理(CALL)命令的輸出存儲到變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM