Comando de salida de captura CMD

Plataforma Windows XP

Al escribir un archivo de comando (.bat), ¿cómo puedo “atrapar” el resultado de un comando en una variable?

Quiero hacer algo como esto

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

Pero esto no funciona

Saludos Stefan

PD No, no puedo descargar grep, cygwin o cualquier otro software, tiene que ser el CMD DS

Puede usar FOR /F y recorrer algunos bucles dentro de un archivo por lotes para capturar el resultado:

 @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% 

Es especialmente importante que haya dos líneas nuevas entre !var!^ Y el %%i continuación.

Además, debe escapar (nuevamente utilizando ^ ) todos los caracteres dentro de la línea de comando para FOR que tengan un significado especial para el shell, como el conducto en esta instancia.

La solución funciona iterando sobre la salida del comando y agregando cada línea a los contenidos de var incrementalmente. Para hacerlo de una manera un tanto conveniente, el script habilita la expansión de variables retrasadas (la syntax de !var! ).

Puede usar for /f para eso:

 for /f %%L in ('dir /tw /-c b.bat ^| findstr /b "[0-9]"') do set CR=%%L 

Sin embargo, esto supone que solo hay una línea de salida. No puede (trivial o útilmente) capturar más de una línea en una variable.

Sin embargo, solo puedo adivinar lo que realmente estás tratando de hacer aquí. Si necesita el tamaño del archivo (simplemente adivinando por el /-c ) entonces es ciertamente más fácil de usar

 for %%X in (b.bat) do set size=%%~zX 

Usted establece un nivel de error con el que sale, y puede solicitar el código de salida de un comando en su archivo por lotes. No estoy seguro de que esto sea lo que quieres decir, pero espero que ayude.