Espacio en disco y batch

Dikmas Mensajes publicados 393 Estado Miembro -  
dionysoos Mensajes publicados 85 Estado Miembro -
Bonjour

J'ai créé un fichier batch afin de faire une sauvegarde de ma base mysql.
La sauvegarde fonctionne très bien, avec création d'un fichier de sauvegarde pour chaque jour de la semaine (je remercie encore chuka pour m'avoir très fortement aidé).

Un problème se pose. Sur certains serveurs où je dois mettre en place la stratégie de sauvegarde, l'espace disque ne permet pas la création de plusieurs fichiers de sauvegarde.
Par conséquent, j'aimerais que, si l'espace disque est insuffisant pour sauvegarder complètement les bases, un message soit envoyé (par mail ou dans un fichier log), disant à l'administrateur que l'espace disque est faible.
Autrement dis, je voudrais savoir si il existe un moyen de connaitre l'espace disque restant.

Merci d'avance
Configuration: Windows XP Firefox 3.0.3

10 respuestas

  1. dionysoos Mensajes publicados 85 Estado Miembro 4
     
    Hola,

    Acabo de modificar el script para que haga lo que pides; en el bucle for cuando se asigna un valor a NbKoFree con la orden SET no olvides añadir /a para indicar que es un valor numérico.

    @echo off
    rem contenido del comando CHKDSK puesto en Temp.txt
    CHKDSK > C:\Temp.txt
    rem recuperación de la línea que contiene el número de ko disponibles en el disco
    FOR /F "delims=" %%a IN ('findstr "Ko" C:\Temp.txt') DO ECHO %%a > C:\Temp1.txt
    rem recuperación del número de asignación disponible
    FOR /F "tokens=1 delims= " %%i IN (C:\Temp1.txt) DO SET /a NbKoFree=%%i
    Echo te queda: %nbKoFree% ko en el disco
    rem prueba si el valor de la variable es menor que el valor definido
    IF %NbKoFree% LSS 37000000 ECHO Espacio en disco insuficiente >> D:\fichier.txt
    1
  2. Dikmas Mensajes publicados 393 Estado Miembro 63
     
    Nadie puede ayudarme? (Es un poco un up no solicitado pero realmente necesito ayuda :S)
    0
  3. dionysoos Mensajes publicados 85 Estado Miembro 4
     
    Hola, no hay ningún comando que haga automáticamente esta tarea, pero con un poco de sapiencia puedes lograrlo con el comando CHKDSK. Te devolverá un resultado como este:

    C:>CHKDSK
    El tipo de sistema de archivos es NTFS.

    Advertencia! No se especificó el parámetro F.
    Ejecución de CHKDSK en modo de sólo lectura.

    CHKDSK está verificación de archivos (etapa 1 de 3)...
    La verificación de archivos ha terminado.
    CHKDSK está verificación de índices (etapa 2 de 3)...
    La verificación de índices ha terminado.
    CHKDSK recupera archivos perdidos.
    CHKDSK está verificación de descriptores de seguridad (etapa 3 de 3)...
    La verificación de descriptores de seguridad ha terminado.
    CHKDSK ha encontrado espacio libre marcado como asignado en la
    tabla bitmap de la tabla maestra de archivos (MFT).
    Corrección de errores en el mapa del volumen.
    Windows ha detectado problemas en el sistema de archivos.
    Ejecute CHKDSK con la opción /F para corregirlos.

    39013852 KB de espacio en disco en total.
    25569392 KB en 214858 archivos.
    60520 KB en 6680 índices.
    0 KB en sectores defectuosos.
    290016 KB usados por el sistema.
    65536 KB usados por el archivo de registro.
    13093924 KB disponibles en el disco.

    4096 bytes en cada unidad de asignación.
    9753463 unidades de asignación totales en el disco.
    3273481 unidades de asignación disponibles en el disco.

    Solo tienes que devolver el resultado con echo a un archivo de texto temporal, procesarlo para recuperar solo la línea que nos interesa
    por lo que esa línea es "3273481 unidades de asignación disponibles en el disco".
    Luego la procesas para obtener solo 3273481
    para hacer estos tratamientos mira el comando FOR /F ;)
    Y una vez que hayas recuperado ese valor haces un simple cálculo
    unidades de asignación disponibles en el disco X bytes en cada unidad de asignación
    el resultado será el tamaño restante en tu disco duro en bytes.

    Puede parecer complicado, pero te aseguro que es muy sencillo, buena suerte.
    0
  4. Dikmas Mensajes publicados 393 Estado Miembro 63
     
    Gracias por tu respuesta. Veré si logro arreglármelas.
    0
  5. dionysoos Mensajes publicados 85 Estado Miembro 4
     
    @echo off
    rem contenido del comando CHKDSK colocado en Temp.txt
    CHKDSK > C:\Temp.txt
    rem recuperación de la línea que contiene el número de ko disponibles en el disco
    FOR /F "delims=" %%a in ('findstr "Ko" C:\Temp.txt') DO ECHO %%a > C:\Temp1.txt
    rem recuperación del número de asignaciones disponibles
    FOR /F "tokens=1 delims= " %%i in (C:\Temp1.txt) DO SET NbKoFree=%%i
    Echo il vous reste : %nbKoFree% ko sur le disque

    Voilà quelque chose dans le genre, je viens de le tester, ça fonctionne. Par contre, le temps que la commande CHKDSK s'exécute, 5 bonnes minutes, tu pourrais croire que l'appli a planté mais non.

    Donc ça marche bien mais c'est quand même assez long :(
    0
  6. reno
     
    No usar CHDSK, es un desastre.
    Usa el método oficial.
    0
  7. dionysoos Mensajes publicados 85 Estado Miembro 4
     
    Hola,
    Si pudieras dárnosla, estaría encantado, no la conozco.
    0
  8. Dikmas Mensajes publicados 393 Estado Miembro 63
     
    Hola

    Gracias, dionysoos. Aparte de que tarda un poco, funciona.

    Tendría otra pregunta.

    Me gustaría que si %nbKoFree% es inferior a 37 000 000 Ko (por ejemplo) escriba "espacio en disco insuficiente" en un archivo .txt.

    Hay que usar la instrucción IF, pero el signo "<" no funciona. ¿Existe alguna forma de hacerlo?

    IF %nbKoFree% < inferior a > 37000000 ECHO Espacio en disco insuficiente >> D:\archivo.txt
    0
  9. Dikmas Mensajes publicados 393 Estado Miembro 63
     
    funciona en Windows XP Pro, pero no en 2003 Server :/

    Ejecuta el comando CHKDSK

    No me crea el archivo Temp1.txt
    por lo tanto, no sabe dónde buscar la variable %NbKoFree%

    hice un simple copiar/pegar de XP Pro a 2003 Server, la arquitectura es exactamente la misma.
    0
  10. dionysoos Mensajes publicados 85 Estado Miembro 4
     
    No sé, tal vez una cuestión de derecho en escritura a verificar.
    0