Como definir comandos de saída como uma variável em um arquivo de lote

É 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
Comentários (7)

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.

Comentários (5)

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.

Comentários (4)