¿apagar windows cuando termine un proceso con un .bat?.

Iniciado por crazykenny, 20 Septiembre 2018, 22:54 PM

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

crazykenny

Hola, vereis, el caso es que hoy he estado realizado un backup de algunas series que tengo descargadas, y, bueno, dado que me ha llevado varias horas, quisiera realizar una pregunta, si no es molestia, claro esta;

¿Seria posible ejecutar un apagado automatico del sistema cuando termine un proceso (en mi caso, terminar de copiar archivos)?.

Entonces, en caso de ser posible, ¿que comando deberia utilizar ademas del comando "Shutdown"?.

Y, bueno, ya de entrada, gracias de antemano por la ayuda.

Muchas gracias por vuestra atencion, y, bueno, saludos.,
A nivel personal, lo que me da mas miedo no son los planteamientos y acciones individuales, sino las realizadas en grupo, ya que estas ultimas pueden acabar con consecuencias especialmente nefastas para todos.
Se responsable, consecuente y da ejemplo.
http://informaticayotrostemas.blogspot.com.es/2013/12/situacion-de-la-educacion-actual-en.html
https://informaticayotrostemas.blogspot.com/

OmarHack

Puedes usar Wmic para sacar el PID y comprobar con un condicional dentro de un bucle que el proceso está activo, y cuando no lo esté lo sacas del bucle y metes el shutdown fuera del bucle.
I like to test things.

EdePC

#2
- Has probado en configurar las Opciones de Energía y Suspensión, que yo sepa el PC se suspende pasados unos 10 a 30 minutos sin uso, esto se puede configurar.

-- Suspender es casi como apagar.

- También existen programas como FastCopy, TeraCopy, etc, que estás diseñados para hacer copias masivas, por ejemplo TeraCopy permite ejecutar un Script (shutdown) al terminar las copias:

https://fastcopy.jp/en/
https://www.codesector.com/teracopy

-- Estos programas copian más rápido debido a que es su especialidad hacer esto, claro que depende mucho de la velocidad de tu Disco Duro y si tienes procesos que estén usando el Disco Duro como el Antivirus, yo suelo desactivar el antivirus cuando hago copias de seguridad masivas.

-- Estos programas permites ser utilizados por línea de comandos, por ejemplo FastCopy:

fastopy.exe "D:\videos" /to="H:\Backup videos\"

--- Incluso puedes utilizar el comando START /WAIT para ejecutar la copia vía XCOPY o TeraCopy o FastCopy, con esto esperas a que termine la copia y luego se ejecuta el siguiente comando:

START /WAIT fastopy.exe "D:\videos" /to="H:\Backup videos\" && shutdown /p

-------------

- Lo más fácil es utilizar TereCopy:


crazykenny

#3
Cita de: EdePC en 21 Septiembre 2018, 02:37 AM
- Has probado en configurar las Opciones de Energía y Suspensión, que yo sepa el PC se suspende pasados unos 10 a 30 minutos sin uso, esto se puede configurar.

-- Suspender es casi como apagar.

Bueno, como norma, siempre quito la suspension pasado X minutos, ya que suelo dejar el ordenador encendido durante bastante tiempo con alguna tarea, y, bueno, he tenido problemas con esta opcion.

Cita de: EdePC en 21 Septiembre 2018, 02:37 AM

- También existen programas como FastCopy, TeraCopy, etc, que estás diseñados para hacer copias masivas, por ejemplo TeraCopy permite ejecutar un Script (shutdown) al terminar las copias:

https://fastcopy.jp/en/
https://www.codesector.com/teracopy

-- Estos programas copian más rápido debido a que es su especialidad hacer esto, claro que depende mucho de la velocidad de tu Disco Duro y si tienes procesos que estén usando el Disco Duro como el Antivirus, yo suelo desactivar el antivirus cuando hago copias de seguridad masivas.

-- Estos programas permites ser utilizados por línea de comandos, por ejemplo FastCopy:

fastopy.exe "D:\videos" /to="H:\Backup videos\"

--- Incluso puedes utilizar el comando START /WAIT para ejecutar la copia vía XCOPY o TeraCopy o FastCopy, con esto esperas a que termine la copia y luego se ejecuta el siguiente comando:

START /WAIT fastopy.exe "D:\videos" /to="H:\Backup videos\" && shutdown /p

-------------

- Lo más fácil es utilizar TereCopy:



Sobre los programas; graicas por el aporte, ya que es otra opcion que no habia tenido en cuenta.

Cita de: OmarHack en 21 Septiembre 2018, 00:21 AM
Puedes usar Wmic para sacar el PID y comprobar con un condicional dentro de un bucle que el proceso está activo, y cuando no lo esté lo sacas del bucle y metes el shutdown fuera del bucle.

Bueno, OmarHack, muchas gracias por tu respuesta, ya que comandos como Wmic es lo que estaba buscando, y, bueno, durante el dia de hoy probare a utilizarlo a ver que tal funciona y ire comentando.

Muchas gracias por vuestra atencion, y, bueno, saludos.

EDITO:

He estado revisando las opciones del comando Wmic, y, bueno, EdePC, debo decir que la idea que comentas de los codigos me han resultado muy utiles.

Ademas, con la opcion que me has comentado de los programas, me has dado otra idea para aprovechar el comando que ha indicado OmarHack, o, almenos, para apagar el PC cuando se termine de copiar datos.

Y, bueno, EdePC y OmarHack, muchas gracias a ambos por vuestra ayuda con la duda que he expuesto en este tema. Os lo agradezco de verdad.,  :D

Muchas gracias por vuestra atencion, y, bueno, saludos.  :D

Edito 3:

He estado buscando un poco de informacion sobre el tema, y, bueno, he visto que en un codigo publicado por pitoloko en 2011 utiliza el comando tasklist para comprobar si un programa se esta ejecutando:

Fuente:

https://foro.elhacker.net/scripting/batch_ejecutar_programa_x_tiempo_si_no_se_esta_ejecutando_solucionado-t321249.0.html

Citar
Prueba con este mio:

Código
:Ocultar
@echo off
title=Chequeador
nircmd win hide ititle "Chequeador" (ESTA LÍNEA ES OPCIONAL, CLARO... XD)


:Comprobar
tasklist /FI "IMAGENAME eq nombredelprograma.exe" | findstr PID >nul
IF %ERRORLEVEL% LEQ 0 Ping -n 5 localhost >nul & goto :Comprobar
IF NOT %ERRORLEVEL% LEQ 0 start /b c:\"windows\system32\calc".exe & Ping -n 5 localhost >nul & goto :Comprobar


Probado y funciona

Entonces; lo primero de todo, quisiera agradecer al autor del mensaje la publicacion del codigo, ya que, bueno, haciendo la siguiente modificacion en el codigo, se podria apagar el ordenador despues de usar una aplicacion para realizar una copia de seguridad.



tasklist /FI "IMAGENAME eq calc.exe" | findstr PID >nul
IF %ERRORLEVEL% LEQ 0 Ping -n 5 localhost >nul & goto :Comprobar
IF NOT %ERRORLEVEL% LEQ 0 start shutdown /P



Por otra parte, y, como otra opcion (o pequeño apaño) para realizar copias de seguridad (aunque solo sean de archivos), quisiera aprovechar para añadir un ultimo programa que he hecho en Blitz3D (Basic) que, bueno, si reemplazamos "calc.exe" por el nombre del programa y ejecutamos el .bat mientras se realizan las copias de seguridad, permitiria apagar el ordenador al terminarlas.



Graphics 1024,768,32,2
cantidad_backup#=0
.apagado_automatico
Cls
Locate 0,0
Print "¿Desea que este programa se cierre automaticamente"
Print " al realizar las copias de seguridad?. (S/N)"
finalizacion_automatica$=Input()
If finalizacion_automatica$="S" Or finalizacion_automatica$="s"
Goto nuevos_directorios_backup
EndIf
If finalizacion_automatica$="N" Or finalizacion_automatica$="n"
Goto nuevos_directorios_backup
EndIf
Goto apagado_automatico
.nuevos_directorios_backup
Print "Inserte la ruta de origen para realizar el Backup:"
directorio$=Input()
If Not Right$(directorio$,1)="\"
directorio$=directorio$+"\"
EndIf
Print "Inserte la ruta de destino para realizar el Backup:"
ruta_archivo_destino$=Input()
If Not Right$(ruta_archivo_destino$,1)="\"
ruta_archivo_destino$=ruta_archivo_destino$+"\"
EndIf
error_dir#=0
.eliminacion_archivos_origen
Print "¿Desea eliminar los archivos de origen?. (S/N)"
dat$=Input()
If dat$="S" Or dat$="s"
Goto fallo_directorios
EndIf
If dat$="N" Or dat$="n"
Goto fallo_directorios
EndIf
Goto eliminacion_archivos_origen
.fallo_directorios
Cls
Locate 0,0
If FileType(directorio$)=0 Or FileType(directorio$)=1
Print "No se ha encontrado el directorio de origen."
error_dir#=error_dir#+1
EndIf
If FileType(ruta_archivo_destino$)=0 Or FileType(ruta_archivo_destino$)=1
Print "No se ha encontrado el directorio de destino."
error_dir#=error_dir#+1
EndIf
If error_dir#>0
Print "¿Que desea hacer?."
Print "1) No realizar ningun Backup y salir del programa."
Print "2) Reinsertar los directorios de origen y destino."
Print "3) Descartar los ultimos directorios de origen y destino"
Print "   y copiar los archivos del resto de carpetas."
opciones#=Input()
If opciones#=1
End
EndIf
If opciones#=2
Goto inicio_backup
EndIf
If opciones#=3
Goto nuevos_directorios_backup
EndIf
Goto fallo_directorios
EndIf
If cantidad_backup#=0
Dim listas_directorios$(cantidad_backup#,2)
listas_directorios$(cantidad_backup#,0)=directorio$
listas_directorios$(cantidad_backup#,1)=ruta_archivo_destino$
If dat$="N" Or dat$="n"
listas_directorios$(cantidad_backup#,2)="0"
EndIf
If dat$="S" Or dat$="s"
listas_directorios$(cantidad_backup#,2)="1"
EndIf
cantidad_backup#=cantidad_backup#+1
Goto dir_backup_anadido
EndIf
If cantidad_backup#>0
cantidad_backup#=cantidad_backup#-1
Dim listas_directorios_b$(cantidad_backup#,2)
For tr#=0 To cantidad_backup#
For trr#=0 To 2
daty$=listas_directorios$(tr#,trr#)
listas_directorios_b$(tr#,trr#)=daty$
Next
Next
cantidad_backup#=cantidad_backup#+1
Dim listas_directorios$(cantidad_backup#,2)
cantidad_backup#=cantidad_backup#-1
For tr#=0 To cantidad_backup#
For trr#=0 To 1
daty$=listas_directorios_b$(tr#,trr#)
listas_directorios$(tr#,trr#)=daty$
Next
Next
listas_directorios$(cantidad_backup#,0)=directorio$
listas_directorios$(cantidad_backup#,1)=ruta_archivo_destino$
If dat$="N" Or dat$="n"
listas_directorios$(cantidad_backup#,2)="0"
EndIf
If dat$="S" Or dat$="s"
listas_directorios$(cantidad_backup#,2)="1"
EndIf
cantidad_backup#=cantidad_backup#+1
Goto dir_backup_anadido
EndIf
.dir_backup_anadido
Cls
Locate 0,0
Print "Se han añadido los nuevos directorios."
Print "¿Que desea hacer?."
Print "1) Realizar las copias de seguridad de los archivos."
Print "2) Añadir un nuevo directorio de origen y de destino."
Print "3) Salir del programa y no realizar ninguna copia de seguridad."
opciones#=Input()
If opciones#=1
Goto inicio_backup
EndIf
If opciones#=2
Goto nuevos_directorios_backup
EndIf
If opciones#=3
.salida_01
Cls
Locate 0,0
Print "¿Realmente desea salir del programa?. (S/N)"
dat$=Input()
If dat$="S" Or dat$="s"
End
EndIf
If dat$="N" Or dat$="n"
Goto dir_backup_anadido
EndIf
Goto salida_01
EndIf
Goto dir_backup_anadido
.inicio_backup
cantidad_backup#=cantidad_backup#-1
For tr#=0 To cantidad_backup#
directorio$=listas_directorios$(tr#,0)
ruta_archivo_destino$=listas_directorios$(tr#,1)
mydir=ReadDir(directorio$)
.base
archivo_actual$=NextFile$(mydir)
If archivo_actual$=""
Print "No se han encontrado mas archivos y/o carpetas."
Print "Accediendo al siguiente directorio."
Goto base_1
End
EndIf
ruta_archivo_actual$=directorio$+archivo_actual$
If FileType(ruta_archivo_actual$)=2
Print ruta_archivo_actual$
Print "Se ha detectado una carpeta:"
Print "Nombre de la carpeta: " + archivo_actual$
Print "No es posible copiar carpetas con este programa."
Print "Comprobando el siguiente archivo/carpeta."
EndIf
If FileType(ruta_archivo_actual$)=1
Print "Se ha detectado un archivo:"
Print "Nombre del archivo: " + archivo_actual$
ruta_archivo_destino_00$=ruta_archivo_destino$+archivo_actual$
If FileType(ruta_archivo_destino_00$)=1
Print "No se puede copiar el archivo:"
Print "Ya existe un archivo con el mismo nombre"
Print "en la carpeta de destino."
EndIf
If Not FileType(ruta_archivo_destino_00$)=1
Print "Copiando archivo..."
CopyFile ruta_archivo_actual$,ruta_archivo_destino_00$
Print "El archivo se ha copiado con exito."
EndIf
If listas_directorios$(cantidad_backup#,2)="1"
Print "Eliminando archivo de origen...."
DeleteFile ruta_archivo_actual$
If FileType(ruta_archivo_actual$)=1
Print "Error: no se ha podido eliminar el siguiente archivo:"
Print archivo_actual$
EndIf
If Not FileType(ruta_archivo_actual$)=1
Print "Se ha eliminado el archivo de origen."
EndIf
EndIf
Print "Comprobando el siguiente archivo/carpeta."
EndIf
Goto base
.base_1
Next
Print "Se han realizado todas las copias de seguridad."
If finalizacion_automatica$="S" Or finalizacion_automatica$="s"
Print "El programa se cerrara en 10 segundos."
Delay 5000
End
EndIf
Print "Pulse una tecla para salir del programa."
WaitKey()
End
A nivel personal, lo que me da mas miedo no son los planteamientos y acciones individuales, sino las realizadas en grupo, ya que estas ultimas pueden acabar con consecuencias especialmente nefastas para todos.
Se responsable, consecuente y da ejemplo.
http://informaticayotrostemas.blogspot.com.es/2013/12/situacion-de-la-educacion-actual-en.html
https://informaticayotrostemas.blogspot.com/

Peruchoa

DShutdown
Tiene varias opciones apagar, reset, hibernar...etc.
...y lo que buscar con una app.
Salu2