批处理 - 将命令输出存储到变量(多行)

时间:2015-06-24 19:45:43

标签: windows batch-file command

我知道这样做的方法有点像作弊,但下面的代码会创建一个临时文件,然后将其删除。我不希望这种情况发生。那么有没有正确或更好的方法呢?

command 2>> "temp"
set /p OUTPUT=<"temp"
del "temp"
echo %OUTPUT%

我知道有一个使用for循环的解决方案但是对于返回多行结果的命令不起作用。我想将所有这些存储到我的变量中。 (我试过这个code btw)

2 个答案:

答案 0 :(得分:3)

您可以将其包含在包含换行符的单个变量中。

setlocal EnableDelayedExpansion
set LF=^


REM The two empty lines are required here
set "output="
for /F "delims=" %%f in ('dir /b') do (
    if defined output set "output=!output!!LF!"
    set "output=!output!%%f"
)
echo !output!

但由于嵌入的换行符,以后处理数据可能有点棘手 并且每个变量仍然有8190个字符的限制。

通常使用数组更容易。

setlocal EnableDelayedExpansion
set "output_cnt=0"
for /F "delims=" %%f in ('dir /b') do (
    set /a output_cnt+=1
    set "output[!output_cnt!]=%%f"
)
for /L %%n in (1 1 !output_cnt!) DO echo !output[%%n]!

答案 1 :(得分:0)

看起来有点难看:

for /f "delims=" %%i in ('dir notexistent.xxx  2^>^&1 1^>nul ') do echo %%i

深入解释here