如何命令的批料(CALL)的输出存储到一个变量(How to store the output of

2019-09-23 12:15发布

我有有命令调用批处理文件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

Answer 1:

作为帮助会告诉你, COMMAND应该是要运行,并得到输出的命令。 所以你的情况second.bat 。 至少它为我的作品:

@echo off
FOR /F "tokens=*" %%F IN ('second.bat') do SET result=%%F
echo %result%

请注意,您不能使用usebackq如果你使用选项'来界定你的命令。



Answer 2:

TL;博士

为了补充乔伊的有用的答案既你的命令的固定版本(与你的第一个命令修复该问题):

::  '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进程。


让你的第二个命令工作所需的唯一的事情是后删除空格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=* 从输入领先定界符实例 ; 用分隔符的默认设置-制表和空格- 前导空格修剪。



文章来源: How to store the output of batch (CALL) command to a variable