1

平台 Windows XP

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

我想做这样的事情

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

但这不起作用

问候斯特凡

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

4

3 回答 3

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
于 2013-02-01T12:51:26.497 回答
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!语法)。

于 2013-02-01T12:55:20.140 回答
0

你可以设置一个你退出的错误级别,你可以在你的批处理文件中询问一个命令的退出代码。我不确定这是你的意思,但我希望它有所帮助。

于 2013-02-01T12:54:18.300 回答