Asignar salida de un progtwig a una variable

Necesito asignar la salida de un progtwig a una variable usando un archivo por lotes MS.

Entonces, en el shell GNU Bash usaría VAR=$(application arg0 arg1) . Necesito un comportamiento similar en Windows usando un archivo por lotes.

Algo así como set VAR=application arg0 arg1 .

    Una forma es:

     application arg0 arg1 > temp.txt set /p VAR= 

    Otro es:

     for /f %%i in ('application arg0 arg1') do set VAR=%%i 

    Tenga en cuenta que el primer % en %%i se utiliza para escapar del % después y es necesario cuando se utiliza el código anterior en un archivo por lotes en lugar de en la línea de comandos. Imagina, tu test.bat tiene algo así como:

     for /f %%i in ('c:\cygwin64\bin\date.exe +"%%Y%%m%%d%%H%%M%%S"') do set datetime=%%i echo %datetime% 

    Como una adición a esta respuesta previa , las tuberías se pueden usar dentro de una instrucción for, escapada por un símbolo de intercalación:

      for /f "tokens=*" %%i in ('tasklist ^| grep "explorer"') do set VAR=%%i 

    @OP, puede usar bucles for para capturar el estado de retorno de su progtwig, si genera algo más que números

    suponiendo que la salida de su aplicación es un código de retorno numérico, puede hacer lo siguiente

     application arg0 arg1 set VAR=%errorlevel% 

    En ejecución: for /f %%i in ('application arg0 arg1') do set VAR=%%i recibía el error: %% era inesperado en este momento. Como solución, tuve que ejecutar lo anterior en cuanto for /f %i in ('application arg0 arg1') do set VAR=%i

    Además de la respuesta, no puede usar directamente los operadores de redirección de salida en la parte configurada del ciclo for (por ejemplo, si desea ocultar la salida de stderror de un usuario y proporcionar un mensaje de error más agradable). En cambio, debes escapar de ellos con un carácter de intercalación ( ^ ):

     for /f %%O in ('some-erroring-command 2^> nul') do (echo %%O) 

    Referencia: redirigir la salida del comando en el bucle for del script por lotes

     @echo off SETLOCAL ENABLEDELAYEDEXPANSION REM Prefer backtick usage for command output reading: REM ENABLEDELAYEDEXPANSION is required for actualized REM outer variables within for's scope; REM within for's scope, access to modified REM outer variable is done via !...! syntax. SET CHP=C:\Windows\System32\chcp.com FOR /F "usebackq tokens=1,2,3" %%i IN (`%CHP%`) DO ( IF "%%i" == "Aktive" IF "%%j" == "Codepage:" ( SET SELCP=%%k SET SELCP=!SELCP:~0,-1! ) ) echo actual codepage [%SELCP%] ENDLOCAL 

    Escribí el script que hace ping a google.com cada 5 segundos y registrando los resultados con la hora actual. Aquí puede encontrar el resultado de las variables “commandLineStr” (con índices)

     @echo off :LOOPSTART echo %DATE:~0% %TIME:~0,8% >> Pingtest.log SETLOCAL ENABLEDELAYEDEXPANSION SET scriptCount=1 FOR /F "tokens=* USEBACKQ" %%F IN (`ping google.com -n 1`) DO ( SET commandLineStr!scriptCount!=%%F SET /a scriptCount=!scriptCount!+1 ) @ECHO %commandLineStr1% >> PingTest.log @ECHO %commandLineStr2% >> PingTest.log ENDLOCAL timeout 5 > nul GOTO LOOPSTART