我正在尝试使用 Windows 批处理文件来运行命令,将其输出通过管道传输到另一个命令,并捕获第一个命令的退出状态。但显然,我不能这样做,尽管我承认 Windows 批处理文件是如此神秘,以至于我可能错过了一项技术。 如何捕获命令的退出状态并通过管道传输其输出?
这是经典do_a_thing | tee logfile.txt
用法,但我希望能够检查是否do_a_thing
成功。经过大量的鬼混、谷歌搜索和阅读 StackOverflow,我想出了以下内容:
setlocal enabledelayedexpansion
set rc=-1
( false & set rc=!errorlevel! & echo rc=!rc! ) | tee logfile.txt
echo %rc%
我曾希望会产生:
C:\>test.bat
C:\>setlocal enabledelayedexpansion
C:\>set rc=-1
C:\>(false & set rc=!errorlevel! & echo rc=!rc! ) | tee logfile.txt
rc=1
C:\>echo 1
1
但是,唉,它没有:
C:\>test.bat
C:\>setlocal enabledelayedexpansion
C:\>set rc=-1
C:\>(false & set rc=!errorlevel! & echo rc=!rc! ) | tee logfile.txt
rc=!rc!
C:\>echo -1
-1
删除“ | tee logfile.txt
”会产生 的预期值!rc!
,但当然,它不会让我捕获日志文件。
C:\>test.bat
C:\>setlocal enabledelayedexpansion
C:\>set rc=-1
C:\>(false & set rc=!errorlevel! & echo rc=!rc! )
rc=1
C:\>echo 1
1