¿Es posible establecer la salida de una sentencia'de un archivo por lotes a una variable, por ejemplo:
findstr testing > %VARIABLE%
echo %VARIABLE%
FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
SET var=%%F
)
ECHO %var%
Yo siempre uso el USEBACKQ para que si tienes una cadena que insertar o un nombre de archivo largo, puedas usar tus comillas dobles sin fastidiar el comando.
Ahora bien, si tu salida va a contener varias líneas, puedes hacer esto
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
Encontré este hilo en esa cosa de Interweb. Se reduce a:
@echo off
setlocal enableextensions
for /f "tokens=*" %%a in (
'VER'
) do (
set myvar=%%a
)
echo/%%myvar%%=%myvar%
pause
endlocal
También puedes redirigir la salida de un comando a un archivo temporal, y luego poner el contenido de ese archivo temporal en tu variable, como tal:
cmd > tmpFile
set /p myvar= < tmpFile
del tmpFile
Crédito al hilo en Tom's Hardware.
Lo he probado así y ha funcionado:
SET /P Var= | Cmd
Al canalizar el comando en una variable, prompt insertará el resultado del comando "Cmd
" en la variable "Var
".
Actualización:
No funciona, mi error, el script que hice fue este:
SET /P Var= | dir /b *.txt
echo %Var%
En realidad estaba mostrando digamos "test.txt", pero en realidad estaba mostrando el resultado del comando "
dir /b *.txt", no el
echo %var%`. Me confundí ya que ambas salidas eran iguales.