我想将命令的结果另存为窗口批处理中的变量

时间:2019-04-26 08:37:49

标签: batch-file

我尝试使用for /f语句来获取命令结果,例如error : file not found,但此代码为%_result% return null

如何获取命令结果?

这是我的代码:

SET CML=forfiles /p %BAKPATH% /M *.zip /D -10 /C "CMD /C del @file"

FOR /F "tokens=* USEBACKQ" %%F IN (
'%CML%'
) DO (
SET _result=%%F
)

echo result = %_result%

2 个答案:

答案 0 :(得分:0)

您的问题尚不清楚,但是您似乎想使用实际的错误消息并将其存储为变量。

@echo off
for /f "delims=" %%a in ('forfiles /p %bakpath% /M *.zip /D -10 /C "CMD /C del @file" 2^>^&1') do set "_result=%%a"
echo %_result%

答案 1 :(得分:0)

另一种方法是将stderr(大多数命令在其中发送错误消息)重定向到stdout,以便可以由for /f命令捕获。使用:

@echo off
setlocal
set BAKPATH=.

SET CML=forfiles /p %BAKPATH% /M *.zip /D -10 /C "CMD /C del @file"

FOR /F "tokens=* USEBACKQ" %%F IN (
`"%CML% 2>&1"`
) DO (
SET _result=%%F
)

echo result = %_result%

在命令调用中添加了2>&1的位置。 2>部分说我们要重定向文件描述符2(又名stderr); &1部分说将其重定向到文件描述符1(又名stdout)。为了保护>&字符,整个命令都用双引号("..."括起来,并与外部{{1} }已更改为usebackq

在没有合适的ZIP文件的情况下,这给出了:

'...'

,但是具有一个或多个10天或更早的ZIP文件,它会提供一个空字符串:

`...`