[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:
@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:
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]
if %nombre%=="carlos" (set ip=192.168.3.6)
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)
Date cuenta que tu pusiste que hay que ingresar:
"carlos"
Y no:
carlos
Prueba:
@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
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
shutdown /s /t 400 /m \\%~1 /c "%mensaje%"
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.
Totalmente comprendido... muchas gracias pablo fue de gran ayuda!
;-)
Cita de: Delva en 16 Noviembre 2010, 18:46 PM
Totalmente comprendido... muchas gracias pablo fue de gran ayuda!
;-)
De nada, para eso estamos ;)
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
Nunca probé a usar shutdown remotamente, pero prueba:
@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
Muchas gracias ahora mismo lo pruebo ;)
Buenas mira acabo de probarlo y he tenido que modificar algo:
@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.0.2")
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%"
ping -n 20 127.0.0.1>nul
shutdown -a /m \\%~1
De la otra forma me lanzaba el shutdown -a antes que el otro, solo le di la vuelta y ahora funciona correcto!
Muchas gracias!!
De nada, no había entendido muy bien tu pregunta. :rolleyes: