我有有命令调用批处理文件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
我有有命令调用批处理文件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;博士
为了补充乔伊的有用的答案既你的命令的固定版本(与你的第一个命令修复该问题):
:: '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=*
条从输入领先定界符实例 ; 用分隔符的默认设置-制表和空格- 前导空格修剪。