如何将错误流重定向到变量

时间:2015-04-20 06:43:16

标签: batch-file cmd

我有以下代码。我想获取错误流,在for循环中执行命令后将其置于变量中,同时我通过将stdout发送到NUL来丢弃它。

 for /f "delims=" %%a IN ('%test_command% 2^>^&1 1^>NUL') do (
           set err_msg="%%~a"
    )

我想为它添加一个功能。除了将stdout发送到NUL之外,我想将其存储在文件中,如何添加该功能?

使用以下代码我可以将输出存储到文件中:

for /f "delims=" %%a IN ('%test_command% 2^>^&1 1^>temp.txt') do (
           set err_msg="%%~a"    
)

但是我想将输出存储到变量中,我该怎么做?

2 个答案:

答案 0 :(得分:1)

仅存储第一行

set /p var=<temp.txt

类似的东西:

do (
    set err_msg="%%~a" && set /p var=<temp.txt
)

存储多行

要将temp.txt中的多行转换为变量,请使用DelayedExpansion和第二个for循环:

setlocal EnableDelayedExpansion
...
for /f "Tokens=* Delims=" %%x in (temp.txt) do set var=!var!%%x

来源Set - Display, set, or remove CMD environment variables

  

将文件的第一行放入变量:

Set /P _MyVar=<MyFilename.txt

答案 1 :(得分:0)

为了得到一个变量的std错误,我创建了一个FOR循环,它将std in和err重定向到findstr命令,然后让你捕获你正在寻找的文本。

FOR /F "eol=; tokens=1-2 delims=" %a in ('*command* 2^>^&1^|findstr /I "*text*"') do (set x=%a)