[batch] Cambiar valor a una variable con IF AYUDA!

Iniciado por Delva, 16 Noviembre 2010, 16:59 PM

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

Delva

[code]
Hola muy buenas... soy nuevo en este foro y el caso que me aburría y me puse a hacer un programilla batch con el fin de usar un chat mendiante el mensaje de aviso de cierre de sesión del shutdown, este es el código:


Código (dos) [Seleccionar]

@echo off
cls
color 0a
echo.
echo            ~-/\-Mensajero ASIR -/\-~
echo _______________________________________________
echo.
echo Escribe IP de destino del mensaje
set /p ip=
echo Escribe Mensaje a enviar
set /p mensaje=

shutdown /s /t 400 /m \\%ip%  /c "%mensaje%"



Bien pues mi intención es asignar a cada IP el nombre del compañero de clase, para en vez de tener que introducir constantemente la Ip, simplemente escribir el nombre de dicha persona... mi mente me llevo a pensar en este código:

Código (dos) [Seleccionar]
echo Escribe nombre completo de destino
set /p nombre=
if %nombre=="carlos" (%1=192.168.3.6)
if %nombre=="rober" (%1=192.168.3.5)
if %nombre=="victor" (%1=192.168.3.11)
if %nombre=="cristian" (%1=192.168.3.27)
echo Escribe Mensaje a enviar

cosa que no funciona como me esperaba ya que la consola me devuelve:

          ~-/\-Mensajero ASIR -/\-~
______________________________________________

Escribe nombre completo de destino
carlos
No se esperaba =192.168.3.6) en este momento.
... espero que me puedan ayudar gracias!


*Edit: Se me olvidaba comentar que el echo de usar este comando es porque en clase ya usamos windows 7 y no disponemos del servicio "Mensajero" y la verdad ni idea de como activarle en este SO.
Y para evitar que el programa nos apague el PC, tengo otro .bat con el contenido shutdown -a....
No vallais a pensar que estamos locos..... pero esque esto de dar FOL par ser técnico de ASIR aburre que te cagas... xD

[/code]


Delva

#2
Vale, eso por un lado, pero ahora despues de probarlo me envía a mi el mensaje en vez de a otro equipo que tengo en red....
y me huele que voy a tener que cambiar algo de:

shutdown /s /t 400 /m \\%ip%  /c "%mensaje%"

porque la consola me devuelve el mensaje:


           ~-/\-Mensajero ASIR -/\-~
_______________________________________________

Escribe nombre de destino
carlos
Escribe Mensaje a enviar
234
mensaje: El nombre de equipo escrito no es válido o no se admite el apagado remo
to en el equipo de destino. Compruebe el nombre e inténtelo de nuevo o póngase e
n contacto con el administrador del sistema.(53)

xassiz~

Date cuenta que tu pusiste que hay que ingresar:

"carlos"

Y no:

carlos


Prueba:
Código (dos) [Seleccionar]
@echo off
color 0a
:main
cls
echo.
echo            ~-/\-Mensajero ASIR -/\-~
echo _______________________________________________
echo.
set "mensaje="
set /p "mensaje=Escribe mensaje: "
if not defined mensaje (goto:main)
set "nombre="
set /p "nombre=Escribe nombre: "
if not defined nombre (goto:main)
if "%nombre%"=="carlos" (call :enviar "192.168.3.6")
if "%nombre%"=="rober" (call :enviar "192.168.3.5")
if "%nombre%"=="victor" (call :enviar "192.168.3.11")
if "%nombre%"=="cristian" (call :enviar "192.168.3.27")
goto:main
:enviar
shutdown /s /t 400 /m \\%~1  /c "%mensaje%"
goto:eof

Delva

#4
Wow! Muchas gracias perfecto! la cuestión es que funciona como quería... pero la verdad que no me queda muy claro el uso de "\\%~1" en

Código (dos) [Seleccionar]
shutdown /s /t 400 /m \\%~1 /c "%mensaje%"

xassiz~

Recojo el primer argumento pasado a la "función" enviar con %1, el "~" lo que hace es eliminar las comillas.

Es decir, ese %~1 se va ir sustituyendo por la ip que le pasemos.

Delva

Totalmente comprendido... muchas gracias pablo fue de gran ayuda!

;-)

xassiz~

Cita de: Delva en 16 Noviembre 2010, 18:46 PM
Totalmente comprendido... muchas gracias pablo fue de gran ayuda!

;-)
De nada, para eso estamos ;)

Delva

Otra pregunta mas, se puede establecer un delay a la hora de que ejecute una orden?? es decir, se me a ocurrido plantear que a continuación de enviar el shutdown, envíe en aproximadamente 20 segundos un shutdown -a a la misma Ip para cancelar el anterior...
Se podría hacer o ya es una gran paja mental? jaja

xassiz~

Nunca probé a usar shutdown remotamente, pero prueba:
Código (dos) [Seleccionar]
@echo off
color 0a
:main
cls
echo.
echo            ~-/\-Mensajero ASIR -/\-~
echo _______________________________________________
echo.
set "mensaje="
set /p "mensaje=Escribe mensaje: "
if not defined mensaje (goto:main)
set "nombre="
set /p "nombre=Escribe nombre: "
if not defined nombre (goto:main)
if "%nombre%"=="carlos" (call :enviar "192.168.3.6")
if "%nombre%"=="rober" (call :enviar "192.168.3.5")
if "%nombre%"=="victor" (call :enviar "192.168.3.11")
if "%nombre%"=="cristian" (call :enviar "192.168.3.27")
goto:main
:enviar
ping -n 20 127.0.0.1>nul
shutown /a /m \\%~1
shutdown /s /t 400 /m \\%~1  /c "%mensaje%"
goto:eof