É possível definir uma expressão's saída de um arquivo de lote para uma variável, por exemplo:
findstr testing > %VARIABLE%
echo %VARIABLE%
FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
SET var=%%F
)
ECHO %var%
Eu sempre uso o USEBACKQ para que se você tiver uma string para inserir ou um nome de arquivo longo, você possa usar suas aspas duplas sem estragar o comando.
Agora, se a sua saída vai conter várias linhas, você pode fazer isso
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
Eu encontrei este tópico naquela coisa da Interweb. Resume-se a:
@echo off
setlocal enableextensions
for /f "tokens=*" %%a in (
'VER'
) do (
set myvar=%%a
)
echo/%%myvar%%=%myvar%
pause
endlocal
Você também pode redirecionar a saída de um comando para um arquivo temporário, e então colocar o conteúdo desse arquivo temporário em sua variável, likesuchashereby:
cmd > tmpFile
set /p myvar= < tmpFile
del tmpFile
Crédito à linha do Hardware Tom's Hardware.
Eu testei-o assim e funcionou:
SET /P Var= | Cmd
Ao pipar o comando em uma variável, o prompt irá inserir o resultado do comando "Cmd
" na variável "Var
".
Actualização:
Não funciona, erro meu, o script que eu fiz foi este:
SET /P Var= | dir /b *.txt
echo %Var%
Na verdade estava mostrando let's say "test.txt
", mas na verdade estava mostrando o resultado do "dir /b *.txt
" comando, não o echo %var%
. Eu fiquei confuso já que ambas as saídas eram iguais.