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
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.
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.