捕获输出命令CMD

时间:2013-02-01 12:43:47

标签: windows batch-file windows-xp cmd

平台Windows XP

当编写命令文件(.bat)时,如何将命令的输出“捕获”到变量中?

我想做这样的事情

SET CR='dir /tw /-c b.bat | findstr /B "[0-9]"'

但这不起作用

关心Stefan

PS 不,我不能下载grep,cygwin或任何其他软件,它必须是CMD DS

3 个答案:

答案 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命令。我不确定这是你的意思,但我希望它有所帮助。