我尝试使用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%
答案 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文件,它会提供一个空字符串:
`...`