平台的Windows XP
当写命令文件(.bat)我怎么能“抓住”一个命令的输出到一个变量?
我想要做这样的事情
SET CR='dir /tw /-c b.bat | findstr /B "[0-9]"'
但是,这不工作
斯特凡问候
PS不,我不能下载中心grep的,cygwin的或任何其他软件,它必须是CMD DS
平台的Windows XP
当写命令文件(.bat)我怎么能“抓住”一个命令的输出到一个变量?
我想要做这样的事情
SET CR='dir /tw /-c b.bat | findstr /B "[0-9]"'
但是,这不工作
斯特凡问候
PS不,我不能下载中心grep的,cygwin的或任何其他软件,它必须是CMD DS
您可以使用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
有特殊含义的外壳,例如在这种情况下的管道。
该解决方案的工作原理是遍历命令的输出和追加每行的内容var
递增。 要做到这一点以某种便捷的方式的脚本能够延迟变量扩展(的!var!
语法)。
您可以使用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
Youc的设置错误级别 ,你有退出,你可以问一个命令的退出码在批处理文件。 林不知道这是你的意思,但我希望它能帮助。