平台的Windows XP捕获输出命令CMD
当写命令文件(.bat)我怎么能“抓住”一个命令的输出到一个变量?
我想要做这样的事情
SET CR='dir /tw /-c b.bat | findstr /B "[0-9]"'
但这不工作
问候斯特凡
PS 不,我不能下载中心grep的,cygwin的或任何其他软件,它必须是CMD DS
平台的Windows XP捕获输出命令CMD
当写命令文件(.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一集的errorlevel你退出与,你可以问一个命令的退出码在批处理文件。即时通讯不知道这是你的意思,但我希望它可以帮助。