Възможно ли е да зададете изхода на изявление'на пакетния файл към променлива, например:
findstr testing > %VARIABLE%
echo %VARIABLE%
FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
SET var=%%F
)
ECHO %var%
Винаги използвам USEBACKQ, така че ако имате низ за вмъкване или дълго име на файл, можете да използвате двойните кавички, без да объркате командата.
Ако изходът ви ще съдържа няколко реда, можете да направите следното
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
Намерих тази тема в този интернет. Състои се от:
@echo off
setlocal enableextensions
for /f "tokens=*" %%a in (
'VER'
) do (
set myvar=%%a
)
echo/%%myvar%%=%myvar%
pause
endlocal
Можете също така да пренасочите изхода на дадена команда към временен файл и след това да поставите съдържанието на този временен файл във вашата променлива, като например:
cmd > tmpFile
set /p myvar= < tmpFile
del tmpFile
Запис на темата в Tom's Hardware.
Тествах го по този начин и той работи:
SET /P Var= | Cmd
Чрез подаване на команда в променлива, prompt ще вмъкне резултата от командата "Cmd
" в променливата "Var
".
Актуализация:
Не работи, моя грешка, скриптът, който направих, беше този:
SET /P Var= | dir /b *.txt
echo %Var%
Всъщност показваше, да речем, "test.txt
", но всъщност показваше резултата от командата "dir /b *.txt
", а не от echo %var%
. Обърках се, тъй като и двата изхода бяха едни и същи.