我需要将程序的输出分配给使用MS批处理文件的变量。

所以在GNU Bash shell中,我将使用VAR=$(应用程序arg0 arg1)。我需要在Windows中使用批处理文件的类似行为。

比如set VAR=application arg0 arg1。

类似的问题

如何在批处理文件中将命令输出设置为变量 我如何得到一个命令的结果在一个变量在窗口? 在Windows批处理文件中使用命令的结果设置变量的值 将命令的输出设置为变量(使用管道) 将命令输出分配给批处理文件中的变量


当前回答

我写了脚本,每5秒ping google.com,并记录当前时间的结果。在这里你可以找到变量“commandLineStr”的输出(带索引)

@echo off

:LOOPSTART

echo %DATE:~0% %TIME:~0,8% >> Pingtest.log

SETLOCAL ENABLEDELAYEDEXPANSION
SET scriptCount=1
FOR /F "tokens=* USEBACKQ" %%F IN (`ping google.com -n 1`) DO (
  SET commandLineStr!scriptCount!=%%F
  SET /a scriptCount=!scriptCount!+1
)
@ECHO %commandLineStr1% >> PingTest.log
@ECHO %commandLineStr2% >> PingTest.log
ENDLOCAL

timeout 5 > nul

GOTO LOOPSTART

其他回答

除了答案之外,你不能在for循环的set部分直接使用输出重定向操作符(例如,如果你想对用户隐藏stderror输出并提供更好的错误消息)。相反,你必须用一个插入字符(^)来转义它们:

for /f %%O in ('some-erroring-command 2^> nul') do (echo %%O)

参考:重定向批处理脚本for循环中的命令输出

一种方法是:

application arg0 arg1 > temp.txt
set /p VAR=<temp.txt

另一个原因是:

for /f %%i in ('application arg0 arg1') do set VAR=%%i

请注意,%%i中的第一个%用于转义后面的%,并且在批处理文件中而不是在命令行中使用上述代码时需要它。想象一下,你的test.bat有这样的东西:

for /f %%i in ('c:\cygwin64\bin\date.exe +"%%Y%%m%%d%%H%%M%%S"') do set datetime=%%i
echo %datetime%

我写了脚本,每5秒ping google.com,并记录当前时间的结果。在这里你可以找到变量“commandLineStr”的输出(带索引)

@echo off

:LOOPSTART

echo %DATE:~0% %TIME:~0,8% >> Pingtest.log

SETLOCAL ENABLEDELAYEDEXPANSION
SET scriptCount=1
FOR /F "tokens=* USEBACKQ" %%F IN (`ping google.com -n 1`) DO (
  SET commandLineStr!scriptCount!=%%F
  SET /a scriptCount=!scriptCount!+1
)
@ECHO %commandLineStr1% >> PingTest.log
@ECHO %commandLineStr2% >> PingTest.log
ENDLOCAL

timeout 5 > nul

GOTO LOOPSTART

作为前面答案的补充,管道可以在for语句中使用,由插入符号转义:

    for /f "tokens=*" %%i in ('tasklist ^| grep "explorer"') do set VAR=%%i

在命令行中执行以下命令时:

for /f %%i in ('application arg0 arg1') do set VAR=%%i

我得到了错误:

%%i was unexpected at this time.

为了解决这个问题,我改为使用一个%符号,就像这样:

for /f %i in ('application arg0 arg1') do set VAR=%i

简介:

在批处理文件中使用%% 在批处理文件之外使用%(在命令行上)