Je možné nastaviť výstup príkazu dávkového súboru do premennej, napr:
findstr testing > %VARIABLE%
echo %VARIABLE%
FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
SET var=%%F
)
ECHO %var%
Vždy používam USEBACKQ, takže ak máte reťazec na vloženie alebo dlhý názov súboru, môžete použiť svoje dvojité úvodzovky bez toho, aby ste pokazili príkaz.
Ak bude váš výstup obsahovať viac riadkov, môžete urobiť toto
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
Našiel som toto vlákno na tom Internete. Zhrňuje sa to do:
@echo off
setlocal enableextensions
for /f "tokens=*" %%a in (
'VER'
) do (
set myvar=%%a
)
echo/%%myvar%%=%myvar%
pause
endlocal
Môžete tiež presmerovať výstup príkazu do dočasného súboru a potom obsah tohto dočasného súboru vložiť do premennej, ako napr:
cmd > tmpFile
set /p myvar= < tmpFile
del tmpFile
Odkaz na vlákno na Tom's Hardware.
Testoval som to takto a fungovalo to:
SET /P Var= | Cmd
Vložením príkazu do premennej prompt vloží výsledok príkazu "Cmd
" do premennej "Var
".
Aktualizácia:
Nefunguje to, moja chyba, skript, ktorý som urobil, bol tento:
SET /P Var= | dir /b *.txt
echo %Var%
V skutočnosti zobrazoval povedzme "test.txt
", ale v skutočnosti zobrazoval výsledok príkazu "dir /b *.txt
", nie príkaz echo %var%
. Bol som zmätený, pretože oba výstupy boli rovnaké.