【问题标题】:Capture output command CMD捕获输出命令 CMD
【发布时间】:2013-01-16 18:45:40
【问题描述】:

Windows XP 平台

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

我想做这样的事情

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

但这不起作用

问候斯特凡

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

【问题讨论】:

    标签: windows batch-file windows-xp cmd


    【解决方案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】:

      您可以为此使用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
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-02-26
          • 1970-01-01
          • 2012-11-22
          • 2012-06-29
          • 1970-01-01
          • 2012-02-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多