捕获输出命令CMD
平台Windows XP
当写一个命令文件(.bat)时,我怎样才能将命令的输出“捕捉”到一个variables中?
我想要做这样的事情
SET CR='dir /tw /-c b.bat | findstr /B "[0-9]"' 但是这不起作用
问候Stefan
PS不,我不能下载grep,cygwin或任何其他软件,它必须是CMD DS
 您可以使用FOR /F并通过batch file中的某些循环来捕获输出: 
 @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有特殊的意义,例如这个例子中的pipe。 
 该解决scheme通过迭代命令的输出并逐行添加到var的内容。 为了方便起见,脚本启用延迟variables扩展( !var!语法)。 
 你可以使用for /f来做到这一点: 
 for /f %%L in ('dir /tw /-c b.bat ^| findstr /b "[0-9]"') do set CR=%%L 
这假定只有一行输出。 你不能(平凡或有用地)捕获一个variables中的多行。
 不过,我只能猜到你真的想在这里做什么。 如果你需要的文件大小(只是猜测因为/-c ),那么它肯定是更容易使用 
 for %%X in (b.bat) do set size=%%~zX 
您可以设置一个您退出的错误级别 ,您可以在batch file中询问命令的退出代码。 即时通讯不知道这是你的意思,但我希望它可以帮助。