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