Dudas tontas.

Iniciado por SPARTAKOS, 28 Agosto 2010, 19:40 PM

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

SPARTAKOS

Buenas.

Tengo un par de dudas, quiero sacarmelas de encima.

1. > nul 2>&1
Por ejemplo, en este código de Leo Gutiérrez. lo ví, y no entendí porqué lo puso así, si podría haber puesto "> nul".
Cita de: Leo Gutiérrez. en  7 Julio 2010, 06:57 AM
Código (dos) [Seleccionar]
@echo off
rem Script que intenta visualizar las unidades
for %%_ in (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, s, t, u, v, w, x, y, z) do (
dir /b %%_:\ > nul 2>&1 && (
echo Unidad "%%_:" detectada
)
)
>nul (pause)
exit /b 0


2. Poner por ejemplo: @ipconfig /release > nul ¿sería lo mismo que poner: @echo off & ipconfig /release > nul?
Es decir, poner @ delante de cada renglón de code, ¿es lo mismo que si pusiera @echo off al inicio del code?

Muchas gracias :).

FerJGS

Bueno, @ echo off oculta el código, pero @ ipconfig oculta el comando ipconfig...

Y sobre lo del >nul ¿a qué te refieres? ¿dónde tendría que ir ese>nul que dices?

SPARTAKOS

for %%_ in (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, s, t, u, v, w, x, y, z) do (
      dir /b %%_:\ > nul 2>&1

Ahí, no entiendo el porqué de ese > nul 2>&1. Quisiera una explicación de para qué se usa, y diferencia con el > nul :).

flony

#3
>nul 2>&1
bue >nul2...
Citar
STDOUT 1 Salida en la ventana del Símbolo del sistema
STDERR 2 Salida de errores en la ventana del Símbolo del sistema
>& Escribe la salida de un controlador en la entrada de otro controlador

Escribe la salida del comando en un archivo o un dispositivo, en lugar de en la ventana del Símbolo del sistema.
STDERR 2 Salida de errores en la ventana del Símbolo del sistema.
Para redirigir toda la salida, incluyendo el controlador 2 (es decir, STDERR), del comando ipconfig al controlador 1 (es decir, STDOUT) y redirigir la salida a Salida.log, escriba:

ipconfig.exe>>salida.log 2>&1
otro ejemplo
Para buscar Archivo.txt y redirigir el controlador 1 (es decir, STDOUT) y el controlador 2 (es decir, STDERR) a Buscar.txt, escriba:

findfile archivo.txt>buscar.txt 2<&1


en definitiva el nul es para que no se vea la redireccion a stderr volviendola a redirigir a stdout todo esto sin que se vea, quedando "guardadas" los errores y aciertos de buscar todos los directorios posibles entre a y z
ojala te sirva de ayuda hace un tiempo me tarde bastante en saber para q era esos simbolos...son todos de redireccion
mas info inicio...ejecutar...%windir%\hh.exe ms-its:%windir%\Help\ntcmds.chm::/ntcmds.htm
en la parte de conceptos...utlizar herrramientas de secuencia...archivo de lote...utilizar operadores de redireccion
si un problema no tiene solucion entonces no es un problema...es algo inevitable

leogtz

#4
Cuando un comando es ejecutado correctamente la salida puede aparecer en stdout, pero si hay un error, puede aparecer en stderr.

Es para ocultar tanto stdout como stderr.
Código (perl) [Seleccionar]

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

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

SPARTAKOS

Perdón por mi ignorancía, pero entendí lo del @, y no lo de > nul 2>&1.
Si alguien me lo pudiera explicar, si puede ser, de forma más sencilla, como para un principiante (que es lo que soy), se los agradecería pero muchísimo.

leogtz

Cuando ejecutas un comando, si este se ejecuta bien se muestra en pantalla(stdout) sino se va a stderr(dispositivo de errores).

Mira, teclea esto en el cmd.exe

EHCO Hello world>NUL

Aunque redirijas a NUL, deberías ver el mensaje de error, esto es porque el dispositivo de salida estandard(stdout) y el dispositivo de errores son distintos.

En cambio si haces:

EHCO Hello world 2>NUL

No verás nada, ya que el mensaje de error fue enviado al "standard error stream".

Tomando esto:

comando > nul 2>&1 && (

2>&1

Se mezclan stdout y stderr en un solo dispositivo y son redirigidos a NUL.


Saludos.
Código (perl) [Seleccionar]

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

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

SPARTAKOS

¿Entonces sería para que no salga algún mensaje de error, si es que lo hay?

leogtz

Sí, para que no salga NADA en pantalla, puesto que ambos dispositivos son mezclados y envíados a NUL.

Saludos.
Código (perl) [Seleccionar]

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

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

FerJGS

Bueno, mira el & sirve para enlazar comandos

por ejemplo

@echo off
cls

se peude combinar con

@echo off&cls

Al escribir

comando > nul 2>&1 && (


Estás enviando ambos a nul.