Hoe stel je de uitvoer van commando's in als een variabele in een batchbestand

Is het mogelijk om een statement's output van een batch file in een variabele te zetten, bijvoorbeeld:

findstr testing > %VARIABLE%

echo %VARIABLE%
FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
SET var=%%F
)
ECHO %var%

Ik gebruik altijd de USEBACKQ zodat als je een string moet invoegen of een lange bestandsnaam hebt, je dubbele aanhalingstekens kunt gebruiken zonder het commando te verknoeien.

Als je uitvoer meerdere regels zal bevatten, kan je dit doen

SETLOCAL ENABLEDELAYEDEXPANSION
SET count=1
FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
  SET var!count!=%%F
  SET /a count=!count!+1
)
ECHO %var1%
ECHO %var2%
ECHO %var3%
ENDLOCAL
Commentaren (7)

Ik vond [deze draad] (http://www.tomshardware.com/forum/230090-45-windows-batch-file-output-program-variable) op dat daar Interweb ding. Komt neer op:

@echo off 
setlocal enableextensions 
for /f "tokens=*" %%a in ( 
'VER' 
) do ( 
set myvar=%%a 
) 
echo/%%myvar%%=%myvar% 
pause 
endlocal 

Je kunt ook de uitvoer van een commando omleiden naar een tijdelijk bestand, en dan de inhoud van dat tijdelijke bestand in je variabele zetten, likeuchashereby:

cmd > tmpFile 
set /p myvar= < tmpFile 
del tmpFile 

Krediet aan de thread op Tom's Hardware.

Commentaren (5)

Ik heb het zo getest en het werkte:

SET /P Var= | Cmd

Door het commando in een variabele te pipen, zal prompt het resultaat van commando "Cmd" in de variabele "Var" plaatsen.

Update:

Het werkt niet, mijn fout, het script dat ik deed was dit:

SET /P Var= | dir /b *.txt
echo %Var%

Het toonde eigenlijk laten we zeggen "test.txt", maar het toonde in feite het resultaat van het "dir /b *.txt" commando, niet het echo %var%. Ik raakte in de war omdat beide uitgangen hetzelfde waren.

Commentaren (4)