Ms-Dos - Programar apagado

 
Vista:

Programar apagado

Publicado por Alejo (11 intervenciones) el 09/11/2008 22:26:19
Buenas...! Necesito ayuda para crear un archivo por lotes para que me apague la computadora al finalizar una descarga desde Internet. Ocurre que muchas veces dejo
descargando de noche a la hora de ir a dormir algunos archivos, y me gustaría encontrar la manera de que un .bat revisara si está activo el proceso cuyo nombre de imagen es iexplore.exe, y si no es así, apagara la PC mediante el SHUTDOWN. Uds. me dirán la manera más fácil de lograrlo, se me había ocurrido que mediante TASKLIST periódicamente se podría volcar la información a un .txt y no sé si será posible de ahí recuperar esa información con FIND o algún otro comando, o también pensaba en usar IF EXIST con iexplore.exe, pero no sé si el comando IF se puede usar con un proceso del sistema, de eso no estoy seguro.
Habitualmente, cuando no uso gestores de descarga, este problema lo solucionaba con Los comandos AT y SHUTDOWN, más no menos según el "tiempo estimado" del cuadro de descarga de archivos de Windows, y según la tasa de transferencia fuera más o menos estable, consigo terminar la descarga y apagar la PC, programando el apagado de la PC a una hora fija determinada. De más está decir que si me quedo corto al usar el comando AT, al forzar el apagado interrumpo la descarga, y si me voy muy lejos, la computadora queda prendida demasiado tiempo innecesariamente.
Muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Programar apagado

Publicado por Antoni Masana (295 intervenciones) el 12/11/2008 07:34:27
A tu primera cuestion la solución seria esto:

@echo off
Tasklist >File.TMP
FIND /i "iexplore" File.Tmp
IF errorlevel 1 goto EnMarcha
del File.TMP
echo ShutDown
:EnMarcha
del File.TMP

El linea: "echo ShutDown " se debe suprimir el echo y poner los parametros del ShutDown que correspondan

La segunda cuestion es
¿Como sabemos que ha finalizado la descarga y que o quien cierra el iexplorer?
¿Sabe el iexplorer cerrarse solo cuando termina?

La ejecucion del BAT se puede programar o bien con el AT o con la Programación de Tareas y que se ejecute cada cierto tiempo, por ejemplo cada 10 minutos.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: la solución

Publicado por Alejo (11 intervenciones) el 23/11/2008 23:05:33
Buenas...! Gracias Antoni Masana. Voy a usar lo que me explicás. Con respecto a lo que preguntás sobre cómo se cierra el proceso iexplore.exe o quién lo cierra, yo lo había pensado para el cuadro de descargas de Windows, en ese caso bastaría no olvidarse de tildar el casillero "Cerrar el diálogo al completar la descarga" y el proceso se cerraría solo al finalizar la descarga, en realidad eso no es problema. Tenía pensado sí, tal como me decís, usar AT para la programación de tareas para que periódicamente se revise si el proceso está activo, y logré esto que sigue, que colocado en SYSTEM32 funciona de diez! (el nombre del programa sería "PROBANDO.BAT"):

TASKLIST > LISTA.TXT
FIND /C /I "IEXPLORE.EXE" LISTA.TXT > CANTIDAD.TXT
FOR /F "skip=1 tokens=3 delims= " %%A IN (CANTIDAD.TXT) DO SET /A Num=%%A
IF %Num% EQU 0 SHUTDOWN -S -F -T 0
TIME /T > HORA.TXT
FOR /F "tokens=1 delims=:" %%B IN (HORA.TXT) DO SET /A Hor=%%B
FOR /F "tokens=2 delims=:" %%C IN (HORA.TXT) DO SET /A Min=%%C
SET /A Min+=1
IF %Min% EQU 60 SET /A Min=00, Hor+=1
AT %Hor%:%Min% PROBANDO.BAT

De esta manera, se ejecuta a sí mismo una vez por minuto. Hasta ahora lo voy probando y va todo bien, sólo faltaría agregar algunas líneas para arreglar algunas desprolijidades, como DEL para borrar (antes del apagado)los archivos .txt que crea el mismo programita, o hacer que esos mismos .txt que va creando, los haga con atributo de ocultos, o agregar lo que haga falta para que al ejecutarlo se copie sólo en SYSTEM32, y que a la vez haga un acceso directo en el escritorio por si se quiere volver a usar, pero bueno, como hacer se pueden hacer muchas cosas, nada más estoy notando que me olvidé que para la variable "Hor" debería hacer lo mismo que hice para la variable "Min" para que cuando llegue a 24 me la vuelva a cero, no? Pero lo importante es que ésto así como está ya funciona bien. Se aceptan críticas siempre que sean constructivas, jaja. Saludos y gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: la solución

Publicado por Alejo (11 intervenciones) el 25/11/2008 00:48:26
Hola! no me había dado cuenta, el programa anterior tiene un error. Estuve largo rato probándolo hasta que lo encontré, no había tenido en cuenta que cuando tomaba la hora del sistema, y la volcaba en las variables a las que llamé "Hor" y "Min", cuando tienen cero a la izquierda el comando SET las interpreta en sistema octal! y cuando no tienen cero a la izquierda en sistema decimal. Así que lo tenía funcionando tanto en un sistema de numeración como en otro. Revisando un poco más, me dí cuenta que el problema sólo estaba en las cifras 08 y 09 (que en octal no existen) ya que del 01 al 07 esos números son equivalentes en ambos sistemas. Así que lo arreglé así, escribí otros dos .bat, no sé si era necesario escribirlos aparte, pero hasta ahora funciona (los tres en system32):

"PROBANDO.BAT"
TASKLIST > LISTA.TXT
FIND /C /I "IEXPLORE.EXE" LISTA.TXT > CANTIDAD.TXT
FOR /F "skip=1 tokens=3 delims= " %%A IN (CANTIDAD.TXT) DO SET /A Num=%%A
IF %Num% EQU 0 SHUTDOWN -S -F -T 0
TIME /T > HORA.TXT
FOR /F "tokens=1 delims=:" %%B IN (HORA.TXT) DO CALL UNO.bat %%B
FOR /F "tokens=2 delims=:" %%C IN (HORA.TXT) DO CALL DOS.bat %%C
SET /A Min+=1
IF %Min% EQU 60 SET /A Min=00, Hor+=1
IF %Hor% EQU 24 SET /A Hor=00
AT %Hor%:%Min% PROBANDO.BAT

"UNO.BAT"
IF %1 EQU 08 SET /A Hor=8
IF %1 EQU 09 SET /A Hor=9
SET /A Hor=%1

"DOS.BAT"
IF %1 EQU 08 SET /A Min=8
IF %1 EQU 09 SET /A Min=9
SET /A Min=%1

Seguramente tendrá muchas cosas que se podrán objetar o corregir, pero como les digo, funciona para lo que lo tenía previsto. Gracias! Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: la solución

Publicado por amparitohijo (94 intervenciones) el 25/11/2008 15:55:29
Hola Alejo.

Este problema es un viejo conocido mío. La solución pasa por poner 0x antes de la variable. Para más información, ya lo expliqué en su día en este mismo foro:

http://www.lawebdelprogramador.com/news/mostrar_new.php?id=60&texto=Ms-Dos&n1=510265&n2=1&n3=1&n4=1&n5=0&n6=0&n7=0&n8=0&n9=0&n0=0

Hoy estoy perezoso... (jejeje) Toma un copy-paste:

set /a diai=0x%fechai:~0,2%

Con esto le estás diciendo que es un número hexadecimal, no octal. 08 y 09 no son números octales válidos, y el msdos se cura en salud, aunque no le especifiques nada.

Vaya... me ha dado el arranque de laboriosidad (jejeje)...

Modificación constructiva a tu script:

"PROBANDO.BAT"
DEL /Q *.TMP
TASKLIST > LISTA.TMP
FIND /C /I "IEXPLORE.EXE" LISTA.TMP > CANTIDAD.TMP
FOR /F "skip=1 tokens=3 delims= " %%A IN (CANTIDAD.TMP) DO SET /A Num=%%A
IF %Num% EQU 0 SHUTDOWN -S -F -T 0
FOR /F "tokens=1,2 delims=:" %%B IN ('time /t') DO ( SET /A Hor=%%B & SET /A Min=%%C )
SET /A Min+=1
IF %Min% EQU 60 SET /A Min=00, Hor+=1
IF %Hor% EQU 24 SET /A Hor=00
AT %Hor%:%Min% PROBANDO.BAT

Y ahora lo explico: es una buena costumbre no llenar los directorios de archivos .TXT que no contienen información útil para el usuario. Acostúmbrate a crear .TMP y luego eliminarlos, o como en este caso, eliminarlos antes de empezar a trabajar.

Tambien evitamos crear un archivo temporal en el segundo FOR poniendo ('TIME /T') entre comillas simples. Tiene el mismo efecto que TIME /T>Archivo.txt y luego FOR...(archivo.txt)...

Tambien te evitas crear dos archivos más para tu script. A mi personalmente me gusta tener el script en un archivo único. Es más sencilla la migración usando este método cuando tienes cientos de scripts.

Un ejemplo, en vez de crear un cadena.ftp para llamarlo desde un FTP -s:cadena.ftp xxx.xxx.xxx.xxx
Yo personalmente me curraría el archivo desde el mismo script, poniendo algo parecido a esto:

ECHO Usuario>cadenaftp.tmp
ECHO CoNtRaSeÑa>>cadenaftp.tmp
ECHO MGET *.* >>cadenaftp.tmp
ECHO QUIT >>cadenaftp.tmp
FTP -s:cadenaftp.tmp xxx.xxx.xxx.xxx
DEL cadenaftp.tmp

Con esto consigo tener el script de conexión "dentro" del archivo .BAT

Bueno, ya está bien por hoy, que luego me canso (jajaja, es broma). No, en serio, el script es muy ingenioso y, sobre todo, funcional. Yo lo hubiese hecho diferente, tal y como te muestro. Pero no mejor que tu, sino diferente. Hay que pensar en Alemán (si funciona, ¿para qué lo vas a cambiar?) Símplemente te propongo mi script para que los compares y cojas ideas para futuros proyectos. Te recomiendo dejar el tuyo funcionando. Lo único, yo le incluiría un ficherito puntoHLP con las características, la ayuda, opciones de migración, etc. Eso es algo que en España se nos olvida siempre (jejeje)

Bueno, salu2 y a seguir haciendo cositas. No dudes en exponernos más consultas o mostrando tus creaciones en el foro. Siempre es mejor una imágen (.BAT) que mil palabras (.HLP)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar