平台Windows XP
当编写命令文件(.bat)时,如何将命令的输出“捕获”到变量中?
我想做这样的事情
SET CR='dir /tw /-c b.bat | findstr /B "[0-9]"'
但这不起作用
关心Stefan
PS 不,我不能下载grep,cygwin或任何其他软件,它必须是CMD DS 的
答案 0 :(得分:1)
您可以使用for /f
:
for /f %%L in ('dir /tw /-c b.bat ^| findstr /b "[0-9]"') do set CR=%%L
这假设只有一行输出。你不能(平凡或有用)在变量中捕获多行。
我只能猜测你真正试图在这里做什么。如果你需要文件大小(只是因为/-c
而猜测)那么它肯定更容易使用
for %%X in (b.bat) do set size=%%~zX
答案 1 :(得分:1)
您可以使用FOR /F
并在批处理文件中查看一些循环来捕获输出:
@echo off
setlocal enabledelayedexpansion
set var=
for /f "tokens=* delims=" %%i in ('dir /tw /-c b.bat ^| findstr /B "[0-9]"') do set var=!var!^
%%i
echo %var%
特别重要的是,!var!^
和%%i
之间有两个换行符。
此外,您需要转义(再次使用^
)FOR
命令行中对shell具有特殊含义的所有字符,例如此实例中的管道。
该解决方案通过迭代命令的输出并逐行将每行附加到var
的内容来工作。为了方便起见,脚本启用了延迟变量扩展(!var!
语法)。
答案 2 :(得分:0)
你设置了一个errorlevel,你可以在批处理文件中询问exitcode命令。我不确定这是你的意思,但我希望它有所帮助。