El equivalente de: variable=$(comando -opciones) de linux en bat?

Iniciado por morenochico, 10 Septiembre 2009, 02:04 AM

0 Miembros y 1 Visitante están viendo este tema.

morenochico

En el shell de linux se puede hacer lo siguiente variable=$(comando -opcion | otro_comando)
echo variable


pero en bat no he encontrado nada igual, lo mas parecido que hay es:
ping -n 1 localhost | findstr /R TT > salida.txt
set /P variable=<salida.txt
echo %variable%


el detalle de que la salida se mande a archivo es que ejecutando ese comando miles de veces el acceso a disco se vuelve lento, directorios de solo lectura etc.

FranciskoAsdf

#1
@ECHO OFF
REM ping -n 1 localhost | findstr /R TT > salida.txt
REM intentas que te diga el numero de TTL que salio?
REM set /P variable=<salida.txt
REM estas mandando un comando completo y complejo a la variable por lo que variable queda vacia.-
REM echo %variable%
REM PAUSE

Podrias utilizar algo como lo siguiente, obviamente puedes evitar crear las dos primeras variables, teniendo cuidado de poner el simbolo "^" antes de la | y antes de >

@ECHO OFF
SET "HOLA=ping -1 LOCALHOST"
SET "Comando=FINDSTR.exe ^/R TT ^>salida.txt"
REM SET "AhoraSexD=%HOLA% %COMANDO%"
REM aca el echo es solo para que veas como se van mostrando las variables o como se van ejecutando.-
ECHO %HOLA% %COMANDO%
REM ECHO %AhoraSexD%
%HOLA% | %COMANDO%
PAUSE

PAUSE


Espero que te sirva de algo.

Saludos, si estoy equivocado en algo PORFAVOR corrijanme ^^

PD: NO tomas en cuenta los REM porke mientras lo escribia comentaba algunas cosas que no servian (segun yo)
Asdf debería ser algún tipo de función.

leogtz

for /f "tokens=*" %%_ in ('comando') do (set "variable=%%_")
echo %variable%


La solución también la hubieras podido encontrar en el tema "Acciones sobre archivos de texto".

http://foro.portalhacker.net/index.php/topic,83725.0.html
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

morenochico

No como buscaba pero al menos tengo algo con que trabajar@echo off
setlocal enabledelayedexpansion
set comando=ping -n 1 localhost | findstr /L 'TTL'
for /f "tokens=1,2,3,4,5,6,7,8,9,10" %%_ in ('%comando%') do (set /a "lineas_=%%_"
call:si %%_
)
goto:EOF
:si
if %1%==Reply ( echo ok
) else ( echo Nop )
goto:EOF
pause


Y es que realmente si quiero trabajar con comandos "complejos", ver una variable, formatearla, compararla ya sea como numero, fecha o alguna otra regla. Algunas veces es cuestion de solo si es correcto o incorrecto, otras sumar o sacar su complemento, sacar una estadistica  etc.

El prolema es que esa varialbe puede esta en el nombre de un archivo, su fecha de creacion o dentro del archivo.

El problema que tenia es con "|" ya que siempre era el que truncaba la instruccion.  A ver si en una de esas sale una instruccion donde no tenga que usar el for.