Tags Palabras claves

Ejecutar fichero .bat al cerrar windows 98

25/01/2008 - 23:46 por Francesc | Informe spam
Me interesaria saber como se puede ejecutar automaticamente un fichero .bat
al cerrarse el Windows 98 SE

Ya se que la copia puede realizarse al inicio poniendo la secuencia en el
autoexec, pero lo que me interesa es hacer la copia del trabajo realizado en
la jornada.

Gracias de antemano.
Francesc

Preguntas similare

Leer las respuestas

#11 Miguel Mollejo Sánchez
06/02/2008 - 20:47 | Informe spam
De nada, me alegro de que funcionara :-)

Saludos. Miguel.


"Francesc" <> escribió en el mensaje
news:
Hola Miguel:

Efectivamente: hechas las pruebas es como tu dices. La segunda vez ya solo
copia los que han sido modificados.

Nuevamente, muchas gracias.

Francesc
"Miguel Mollejo Sánchez" <> escribió en el mensaje
news:%
Hola :-)

Aquí acabo de probar y ha funcionado bien... Es decir, al poner el
parámetro /M copia sólo los archivos con el atributo "A" de modificado
establecido y les quita el atributo de modificado. Por ejemplo, la
primera vez, copia todos y si lo tecleo seguidamente no copia ninguno. Si
modifico uno y lo tecleo otra vez, sólo copia ese uno.

Lo único que se me ocurre es que algo "modifique" todos los archivos
entre copia y copia (¿qué clase de archivos son? ¿Pertenecen todos al
mismo "documento", "base de datos" o algo así?), o le establezca el
atributo "A" (por ejemplo, moverlos o copiarlos desde otra ubicación
antes de usar XCOPY)... o bien que en la orden de XCOPY no desactive el
atributo "A" (esté a la vez puesto el parámetro /A)

Envíame si quieres tu archivo BAT al correo (la dirección de este
mensaje, quitando los %) y lo miro a ver si encuentro alguna causa. Una
prueba podría ser quitar momentaneamente la orden de apagado en el
archivo BAT, y ejecutarlo dos veces seguidas a ver si ocurre lo mismo,
observando a la vez los atributos con el Explorador de Windows o con el
comando ATTRIB de MS-DOS, para ver si se desactivan correctamente después
de la copia o si vuelven a activarse por algo.

Saludos. Miguel.


"Francesc" <> escribió en el mensaje
news:%2363%234%
Hola Miguel:

Me interesaba precisamente el parametro /M pero resulta que me sigue
apareciendo la indicacion de que copia todos los ficheros y no solamente
los modificados.

¿Qué he hecho mal?

Francesc
"Miguel Mollejo Sánchez" <> escribió en el mensaje
news:%
Los parametros de XCOPY hacen lo siguiente... me parecieron los mas
adecuados para hacer una copia, pero segun como quieras hacerla tu,
considera cuales hay que poner y cuales no (si la haces con XCOPY,
vaya):
- /M copia solo los archivos con el atributo de "modificado" (A),
asi por ejemplo, si simplemente se copia una carpeta sobre otra para
hacer la copia de seguridad, esto solo copiaria los archivos
modificados, ahorrando tiempo. Es "opcional", digamos, y segun como
hagas la copias deberias o no utilizarlo (si por ejemplo borras la
copia anterior antes de empezar la nueva copia, no deberias utilizarlo,
o si no haces la copia siempre en el mismo sitio).
- /S /E copia todos los subdirectorios incluidos los vacios. Para
hacer una copia de archivos incluyendo las subcarpetas.
- /V verifica que los archivos se escriben correctamente en la
carpeta o unidad de destino.
- /F muestra todos los nombres de los archivos que se copian, para
ver si falta alguno o si se copian todos los que se quiere.
- /H copia tambien archivos ocultos, por si fuera necesario.
- /Y sobreescribe los archivos del destino sin preguntar, por si por
ejemplo se hace siempre la copia sobre el mismo destino.

Me alegro de que sirviera la idea :-)

Saludos. Miguel.


"Francesc" <> escribió en el mensaje
news:ev$
Hola Miguel:

Ya lo he hecho y funciona correctamente.

Por cietto, una curiosidad: ¿Para qué sirven los parámetros "/M /S /E
/V /F /H /Y"

Muchas gracias por tu ayuda.


Francesc
"Miguel Mollejo Sánchez" <> escribió en el mensaje
news:%
Hola...

No se si te sirve la idea, pero ¿Valdría que en vez de que se
ejecute automáticamente un archivo .BAT cuando elijas cerrar Windows
98, tu ejecutaras el archivo .BAT (por ejemplo, poniéndole un acceso
directo en el Escritorio para facilitarlo o algo así...) y que al
terminar lo que tenga que hacer ese archivo BAT, Windows 98 se
cerrara?

Si eso te sirve, bastaría con que la última línea de tu archivo
BAT fuera:
C:\Windows\Rundll32.exe shell32.dll,SHExitWindowsEx 1 para
apagar, o
C:\Windows\Rundll32.exe shell32.dll,SHExitWindowsEx 2 para
reiniciar.
Despues de esa linea, inmediatamente usar EXIT para que se
cierre la ventana de MS-DOS del programa BAT y se pueda cerrar
Windows (si la ventana se queda abierta, no se cerraría Windows, me
parece).

Un ejemplo MUY simplificado:
@ECHO OFF
ECHO Copiando el trabajo...
XCOPY C:\MISDOC~1\*.* D:\COPIAS /M /S /E /V /F /H /Y
IF ERRORLEVEL 1 GOTO Fallo
IF ERRORLEVEL 0 GOTO Apagar

: Fallo
ECHO Ha habido algun problema al copiar.
PAUSE
EXIT

: Apagar
ECHO La copia ha terminado bien y apagamos.
C:\Windows\Rundll32.exe shell32.dll,SHExitWindowsEx 1
EXIT


Saludos. Miguel.


"Francesc" <> escribió en el mensaje
news:
Me interesaria saber como se puede ejecutar automaticamente un
fichero
.bat al cerrarse el Windows 98 SE

Ya se que la copia puede realizarse al inicio poniendo la secuencia
en el
autoexec, pero lo que me interesa es hacer la copia del trabajo
realizado
en la jornada.

Gracias de antemano.
Francesc
















Respuesta Responder a este mensaje
#12 Miguel Mollejo Sánchez
06/02/2008 - 22:03 | Informe spam
De nada, me alegro de que te sirva :-)

Saludos. Miguel.


<> escribió en el mensaje
news:
On 6 feb, 02:01, "Miguel Mollejo Sánchez" <>
wrote:
Hola :-)

Los comandos de MS-DOS al terminar, normalmente devuelven un valor de
ERRORLEVEL, que es un número entero positivo o 0. Este número se suele
utilizar para indicar si han terminado de hacer su trabajo correctamente,
si
ocurrió un error y cuál fue...

El número que de cada programa para indicar si ha terminado
correctamente o con error depende del propio programa (es decir, quien lo
programara indicaría los números), por lo que para averiguar qué significa
un número para cada programa habría que consultar la documentación del
programa. Lo que normalmente sí se "respeta" es que el 0 indica que
terminó
correctamente y los demás números indican algún tipo de error. Pero
repito,
depende del programa y no tiene porque ser así. Por ejemplo SCANDISK da 0
si
terminó bien y no había errores y 255 (creo recordar) si terminó bien y
corrigió todos los errores, y sin embargo parece lógico que ambas
situaciones se querrían tratar como buenas.

Una vez que sabes los números de error que va a devolver un programa,
puedes colocar, *justo después* de su orden, varias lineas
IF ERRORLEVEL n orden

Lo que hacen estas lineas es ejecutar la "orden" que va después del
número si el errorlevel es *mayor o igual* que "n". Fíjate especialmente
que
la orden se ejecuta si el errorlevel es *mayor o igual*, no si es *igual*.
Es por ello que todas las órdenes errorlevel han de colocarse ordenadas
por
el número "n" en orden descendente (desde la más alta que quieras
considerar
hasta 0), para que si por ejemplo tenemos:
PROGRAMA.EXE /H /V
IF ERRORLEVEL 3 PROGRAMA /Error3
IF ERRORLEVEL 1 PROGRAMA /Error1
IF ERRORLEVEL 0 PROGRAMA /Error0

Suponemos que 3 es el máximo errorlevel que devuelve nuestro programa
y
que en el ejemplo devuelve un 2:
- Si errorlevel es mayor o igual que 3 ejecutar PROGRAMA /Error3
-> No se ejecuta porque el errorlevel es 2 (menor que 3)
- Si errorlevel es mayor o igual que 1 ejecutar PROGRAMA /Error1
-> Si se ejecuta porque el errorlevel es 2 (mayor o igual que
1)
- Si errorlevel es mayor o igual que 0 ejecutar PROGRAMA /Error0
-> *También se ejecuta* porque el errorlevel es 2 (mayor o
igual que 0)

Hay que tener cuidado de que no se ejecuten todos los IF ERRORLEVEL
que
están por debajo del que debería ejecutarse. Para ello se pueden hacer dos
cosas. La primera es no poner órdenes de programas después de IF
ERRORLEVEL
n, sino utilizar órdenes GOTO (ir a una etiqueta) y poner aquellas órdenes
que nos interesen en la parte del programa correspondiente a la etiqueta,
como ocurría en el ejemplo que puse en el mensaje anterior. O bien
"anidar"
los IF ERRORLEVEL de la siguiente forma:
PROGRAMA.EXE /H /V
IF ERRORLEVEL 3 PROGRAMA /Error3
IF ERRORLEVEL 1 IF NOT ERRORLEVEL 3 PROGRAMA /Error1
IF ERRORLEVEL 0 IF NOT ERRORLEVEL 1 PROGRAMA /Error0

Fíjate que en este último ejemplo, si pusieramos IF ERRORLEVEL 1 IF
NOT
ERRORLEVEL 2 PROGRAMA /Error1, ninguna de las lineas ejecutaría si el
errorlevel es 2, y se saltaría todas las lineas IF ERRORLEVEL, lo cual no
suele ser lo deseable.

La mejor forma, en mi opinión, es la de utilizar órdenes GOTO y luego
en
las etiquetas poner las órdenes de programas que se quieran (como venía en
el ejemplo del mensaje anterior), y además evitar que la ejecución se
salte
todas las lineas inadvertidamente poniendo un último GOTO al final:
PROGRAMA.EXE /H /V
IF ERRORLEVEL 3 GOTO Error3
IF ERRORLEVEL 2 GOTO Error1o2
IF ERRORLEVEL 1 GOTO Error1o2
IF ERRORLEVEL 0 GOTO Error0
GOTO ErrorInesperado <- Nunca debería llegar aquí, pero por si
acaso, un GOTO sin condición, para que no
salte
inadvertidamente a ejecutar lo que esté por debajo, en este caso lo de
la etiqueta
:Error3

:Error3
PROGRAMA.EXE /Error3
GOTO OtroSitio

:Error1o2
PROGRAMA.EXE /Error1
EXIT

:Error0
PROGRAMA.EXE /Error0
GOTO OtroSitio

:ErrorInesperado
ECHO El programa no funciona bien o el programador se ha
equivocado.
EXIT

Y eso es todo, creo... no se si lo he liado mucho, o más que lo debía.
Espero que quede mas o menos claro el uso de los IF ERRORLEVEL n, pero si
tuvieras alguna duda, no tengas reparo en volver a escribir, o en
escribirme
al correo (el de este mensaje, pero si los %).

Ah, y además IF se puede usar con más cosas, como IF EXIST, IF
parámetro
== parámetro ... y en Windows 2000 y XP, aún hay más posibilidades.

Saludos. Miguel.

<> escribió en el
mensajenews:
Hola Miguel acabo de leer este hilo... y me interesan estas lineas del
codigo, ya que soy novato en esto del batch, y bueno, entiendo todo el
codigo excepto estas lineas:
XCOPY C:\MISDOC~1\*.* D:\COPIAS /M /S /E /V /F /H /Y
IF ERRORLEVEL 1 GOTO Fallo
IF ERRORLEVEL 0 GOTO Apagar

Concretamente las 2 ultimas, los IF´s como funcionan esos? me refiero
a: errorlevel1 o errorlevel 0... como sabes cual es el que indica el
error...y en fin.. todos los comandos lo permiten, añadiendo eso,
llevarte a la parde de ":fallo" o a la de ":correcto" ¿?
Si pudieras explicarmelo te lo agradeceria

Saludos, Adrian



Perfecto, muchisimas gracias, me ha servido de mucho la explicacion..
es más voy a utilizarla ya ^^

Saludos, Adrián.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida