我知道一种方法,有点像作弊,但下面的代码创建了一个临时文件,然后将其删除。我不希望这种情况发生。那么有没有更好的或者正当的方法来做到这一点?
command 2>> "temp"
set /p OUTPUT=<"temp"
del "temp"
echo %OUTPUT%
我知道有一种使用for循环的解决方案,但对于返回多行结果的命令无效。我想将它们全部存储到我的变量中。(顺便说一下,我尝试过这个code)
我知道一种方法,有点像作弊,但下面的代码创建了一个临时文件,然后将其删除。我不希望这种情况发生。那么有没有更好的或者正当的方法来做到这一点?
command 2>> "temp"
set /p OUTPUT=<"temp"
del "temp"
echo %OUTPUT%
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!
但是由于嵌入的换行符,稍后处理数据可能会有些棘手。
而且每个变量仍然有8191个字符的限制。
通常使用数组更容易。
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]!
%%i
设置为变量,如 do set var=%%i
时,它只会存储最后一行。 - ozcanovunc
set /p
命令将只会将临时文件中的第一行内容存储到变量中。这符合您的需求吗?如果是这样,那么可以通过添加一个if defined
语句来轻松调整for
循环以实现该功能。 - SomethingDarkline1#line2#line3
,其中#
表示“新行”)- 但在后一种情况下,您可能需要仔细选择字符,并且有大约8180个字符的限制。 - Magoo