Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: morenochico en 10 Septiembre 2009, 02:04 am



Título: El equivalente de: variable=$(comando -opciones) de linux en bat?
Publicado por: morenochico en 10 Septiembre 2009, 02:04 am
En el shell de linux se puede hacer lo siguiente
Código:
variable=$(comando -opcion | otro_comando)
echo variable

pero en bat no he encontrado nada igual, lo mas parecido que hay es:
Código:
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.


Título: Re: El equivalente de: variable=$(comando -opciones) de linux en bat?
Publicado por: FranciskoAsdf en 10 Septiembre 2009, 02:18 am
Código:
@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 >
Código:
@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)


Título: Re: El equivalente de: variable=$(comando -opciones) de linux en bat?
Publicado por: leogtz en 10 Septiembre 2009, 03:28 am
Código:
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 (http://foro.portalhacker.net/index.php/topic,83725.0.html)


Título: Re: El equivalente de: variable=$(comando -opciones) de linux en bat?
Publicado por: morenochico en 10 Septiembre 2009, 20:30 pm
No como buscaba pero al menos tengo algo con que trabajar
Código:
@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.