Prog .bat

Résolu
Bonjour,

voila ma prof veux qu'on fasse un programme en .bat mais le problème c'est qu'elle nous a mi de coté ceux qui savent pas et aider les mecs qui savait déjà faire. on est a l'école pour apprend merde. bref y'a t il qu'elle qu'un qui peut m'aider et m'expliquer le truc que ma prof veux? ça serai gentil . merci

ça c'est l'exemple de la prof elle nous a dit qu'il faller faire pareil pour sauvegarder ( xcopy je croi) et supprimer ( del ?) aider moi sil vous plais

@echo off
:debut
cls
echo 1.affchage
echo 2.sauvegarde
echo 3.suppression
set/P choix=faites votre choix (1.2.3)
if "%choix%"=="1" goto aff
if "%choix%"=="2" goto sauv
if "%choix%"=="3" goto supp
echo valeur non conforme : tapez 1 . 2 ou 3
pause
goto debut
:aff
if "%1"=="" goto rep
if exist %1\nul goto dir
:erreur
echo reprtoire inexistant
pause
:rep
set /p rep=entrez un nom de repertoire
if not exist %rep% goto erreur
cd %rep%
dir
pause
goto debut
:dir
cd %1
dir
pause
goto debut
Configuration: Windows Vista
Firefox 3.0.3

7 réponses

  1. Bonsoir,

    voila ma prof veux qu'on fasse un programme en .bat mais le problème c'est qu'elle nous a mi de coté ceux qui savent pas et aider les mecs qui savait déjà faire. on est a l'école pour apprend merde. bref y'a t il qu'elle qu'un qui peut m'aider et m'expliquer le truc que ma prof veux? ça serai gentil . merci

    ça c'est l'exemple de la prof elle nous a dit qu'il faller faire pareil pour sauvegarder ( xcopy je croi) et supprimer ( del ?) aider moi sil vous plais


    Je crois que ce que ta prof. souhaite c'est que tu t'inspires de l'existant et que tu y insères les deux commandes XCOPY et DEL, c'est tout je pense.

    J'ai taillé un exemplaire à partir de l'algo. existant. Je l'ai voulu modulaire (CALL) ne serait-ce que pour éviter de dupliquer la séquence "saisie et contrôle du répertoire". j'ai quelque peu remanié et ajouté des séquences aussi. Tu peux le tester en l'état, il ne te reste qu'à ajouter les commandes XCOPY et DEL aux endroits indiqués. La fonction "aff" fonctionne. A toi maintenant !

    SETLOCAL ENABLEdelayedExpansion
    SETLOCAL ENABLEextensions
      CLS
    
    SET "rep=%1"
    
    :debut
    
    CALL :CONTROL_REP
    rem cls
    
    IF "%rep%"          ==     "$"       (
        ECHO.
        ECHO $ saisi : Fin du traitement %0.
        GOTO                    :EOF    )
    
    :TEST_CHOIX
    cls
    IF NOT "%rep%"     ==      ""      (
       ECHO.
       ECHO Repertoire accede : %rep% )
    ECHO.
    echo    1.affchage
    echo    2.sauvegarde
    echo    3.suppression
    ECHO    4.Choix d'un nouveau repertoire
    ECHO.
    ECHO    $.FIN du traitement
    ECHO.
    
    set/P "choix=faites votre choix (1.2.3.4.$) "
    
    IF "%choix%"            ==     "$"           (
        ECHO $ saisi : Fin du traitement %0
        GOTO                      :EOF           )
    
       if "%choix%"         ==     "1"           ( CALL :aff
     ) ELSE (
       if "%choix%"         ==     "2"           ( CALL :sauv
     ) ELSE (
       if "%choix%"         ==     "3"           ( CALL :supp
     ) ELSE (
       IF "%choix%"         ==     "4"           (
          SET "rep="
          GOTO                    debut
     ) ELSE (
          echo valeur non conforme : tapez 1 . 2 . 3 . 4  ou $
          pause
          SET "choix="                          ))))
    
    GOTO         TEST_CHOIX
    
    
    
    rem --------------------------------------------------------------------
    rem         Sous-programme d'affichage de la directorie
    rem --------------------------------------------------------------------
    
    :aff
    cls
    dir %rep%
    pause
    rem Fin du Sous-programme. Retour après la commande: CALL :aff
        GOTO            :EOF
    rem --------------------------------------------------------------------
    
    rem --------------------------------------------------------------------
    rem         Sous-programme de sauvegrde de la directorie
    rem --------------------------------------------------------------------
    
    :sauv
    cls
    ECHO Insere ici la commande de sauvegarde COPY
    rem
    pause
    rem Fin du Sous-programme. Retour après la commande: CALL :sauv
        GOTO            :EOF
    rem --------------------------------------------------------------------
    
    
    rem --------------------------------------------------------------------
    rem         Sous-programme de sauvegrde de la directorie
    rem --------------------------------------------------------------------
    
    :supp
    cls
    ECHO Insere ici la commande de suppression DEL
    rem
    pause
    rem Fin du Sous-programme. Retour après la commande: CALL :supp
        GOTO            :EOF
    rem --------------------------------------------------------------------
    
    
    
    rem --------------------------------------------------------------------
    rem    Sous-programme de saisie et de contrôle du nom du repertoire.
    rem --------------------------------------------------------------------
    
    :CONTROL_REP
    
    IF "%rep%"          ==     ""        (
        set /p "rep=Entrez un nom de repertoire " )
    
    IF "%rep%"          ==     ""        (
       ECHO.
       ECHO Aucun nom de repertoire n'a ete saisi.
       GOTO CONTROL_REP                  )
    
    IF "%rep%"          ==     "$"       (
        GOTO :EOF                        )
    
    if not exist %rep%                   (
        ECHO.
        ECHO %rep%: Repertoire inconnu.
        ECHO.
        SET "rep="
        goto CONTROL_REP                 )
    rem Fin du Sous-programme. Retour après la commande: CALL :CONTROL_REP
        GOTO            :EOF
    rem --------------------------------------------------------------------


    J'ai fait quelques tests concluants. Tiens moi informé de tes tests, merci.
    1. RECTIFICATIFS :

      Double quotes :

      La commande : dir %rep% doit se coder : dir "%rep%"

      de même la commande :
      IF NOT EXIST %rep% (
      doit se coder :
      IF NOT EXIST "%rep%" (

      pareil pour :
      ECHO Repertoire accede : %rep% )
      doit se coder :
      ECHO Repertoire accede : "%rep%" )

      Ceci afin de prendre rep en tant que chaînes de caractères comprenant des espaces possibles ex :
      C:\Documents and Settings\....................

      Pour la même raison la commande :
      SET "rep=%1"
      doit être codée :
      SET "rep=%1 %2 %3 %4 %5 %6 %7 %8 %9" (max. 9 groupes de c. séparés par un espace, dans le nom d'un répertoire)
      suivie du test :
      IF "%rep%" == " " ( SET "rep=" )

    2. @cchristianRECTIFICATIFS (suite)

      Le dernier test du pécédent message doit comporter 8 espaces (cas où aucun répertoire n'est saisi en paramètre suivant le nom du .bat ) :
      IF  "%rep%"             == "        "       ( SET  "rep=" )

      Il est également possible de formaliser ce test sous cette forme :
      IF  "%1"             == ""       ( SET  "rep=" )
  2. franchement je te remercie je me met dessus et je te dit si ça se passe bien
    merci si j'ai des question je te tient au courant
    1. bonjour

      j'ai tout rectifier la fonction del marche mais pour sauv j'ai mis ca
      :sauv
      cls
      xcopy "%rep%"
      rem
      pause
      rem Fin du Sous-programme. Retour après la commande: CALL :sauv
      GOTO :EOF

      il faut pas rajouter quelque chose parceque a chaque fois il me dit si je veut le remplacer ?

      merci
      1. Bonjour,

        Il faut préciser un répertoire de sauvegarde ici Save_rep

        :sauv
        cls
        SET "Save_rep=C:\Documents and Settings\Christian\Mes documents\Save_rep"
        rem ECHO Insere ici la commande de sauvegarde COPY
        
        XCOPY  "%rep%"  "%Save_rep%"   /E


        D'autre part je joins la dernière version du batch qui règle le problème des espaces disséminés dans un nom de répertoire (le problème n'était pas complètement résolu, je m'en suis rendu compte en faisant quelques tests supplémentaires) Pour ce faire j'ai ajouté un petit sous-programme :
        en fin de fichier.
        :LOOP_PARAM
        L'appel à ce S.P.
        CALL :LOOP_PARAM %1 %2 %3 %4 %5 %6 %7 %8 %9
        se trouve au début du fichier.

        ECHO OFF
        
        SETLOCAL ENABLEdelayedExpansion
        SETLOCAL ENABLEextensions
          CLS
          
        rem Marge gauche (40 espaces) servant à centrer l'affichage des informations.
            SET     "marge="
            FOR /L    %%I          IN  (0,1,40)      DO  (
                SET     "marge=!marge! "                 )
                
        rem     SET     "marge=                                               "
            SET     "rep="
            SET     "separ_dos="
            SET     "lib_anom=                      "
        
            CALL :LOOP_PARAM  %1 %2 %3 %4 %5 %6 %7 %8 %9
        
        :debut
        
            CALL :CONTROL_REP
        
            IF "%rep%"              ==     "$"           (
               ECHO.
               ECHO $ saisi : Fin du traitement %0.
               GOTO                       :EOF           )
        
        :TEST_CHOIX
            CLS
        
            FOR /L    %%I          IN  (0,1,20)      DO  (
                ECHO.                                    )
        
            IF NOT "%rep%"       ==      ""              (
                ECHO.
                ECHO         Repertoire accede : "%rep%" )
            ECHO.
            ECHO.
            ECHO    %marge% 1.  A f f i c h a g e.
            ECHO.
            ECHO    %marge% 2.  S a u v e g a r d e.
            ECHO.
            ECHO    %marge% 3.  S u p p r e s s i o n.
            ECHO.
            ECHO    %marge% 4.  N o u v e a u  r e p e r t o i r e.
            ECHO.
            ECHO.
            ECHO    %marge% $.  F I N  d u  t r a i t e m e n t.
            ECHO.
            ECHO.
        
            SET /P  "choix=%lib_anom% faites votre choix : "
            SET     "lib_anom=                      "
        rem    SET     "lib_anom=%marge%"
        
            IF "%choix%"         ==     "$"             (
                ECHO $ saisi : Fin du traitement %0
                GOTO                      :EOF          )
        
            IF "%choix%"         ==     "1"             ( CALL :aff
          ) ELSE (
            IF "%choix%"         ==     "2"             ( CALL :sauv
          ) ELSE (
            IF "%choix%"         ==     "3"             ( CALL :supp
          ) ELSE (
            IF "%choix%"         ==     "4"             (
               SET "rep="
               SET "choix="
                GOTO                    debut
         ) ELSE (
              SET "lib_anom=%choix% : valeur saisie non conforme."
              IF "%choix%"       ==     ""                     (
                 SET "lib_anom=Aucun choix n'a ete effectue."   )
                                                        ) ) ) )
        
           SET "choix="
           GOTO         TEST_CHOIX
        
        
        
        
        rem --------------------------------------------------------------------
        rem         Sous-programme d'affichage de la directorie
        rem --------------------------------------------------------------------
        
        :aff
        cls
        dir "%rep%"
        pause
        rem Fin du Sous-programme. Retour après la commande: CALL :aff
            GOTO            :EOF
        rem --------------------------------------------------------------------
        
        rem --------------------------------------------------------------------
        rem         Sous-programme de sauvegrde de la directorie
        rem --------------------------------------------------------------------
        
        :sauv
        cls
        SET "Save_rep=C:\Documents and Settings\Christian\Mes documents\Save_rep"
        ECHO Insere ici la commande de sauvegarde COPY
        rem XCOPY  "%rep%"  "%Save_rep%"    /E
        
        rem
        pause
        rem Fin du Sous-programme. Retour après la commande: CALL :sauv
            GOTO            :EOF
        rem --------------------------------------------------------------------
        
        
        rem --------------------------------------------------------------------
        rem         Sous-programme de sauvegrde de la directorie
        rem --------------------------------------------------------------------
        
        :supp
        cls
        ECHO Insere ici la commande de suppression DEL
        rem
        pause
        rem Fin du Sous-programme. Retour après la commande: CALL :supp
            GOTO            :EOF
        rem --------------------------------------------------------------------
        
        
        
        rem --------------------------------------------------------------------
        rem    Sous-programme de saisie et de contrôle du nom du repertoire.
        rem --------------------------------------------------------------------
        
        :CONTROL_REP
        
           IF "%rep%"          ==     ""                (
               ECHO.
               SET /p "rep=Entrez un nom de repertoire " )
        
           IF "%rep%"          ==     ""                (
              ECHO.
              ECHO Aucun nom de repertoire n'a ete saisi.
              GOTO CONTROL_REP                          )
        
           IF "%rep%"          ==     "$"               (
              GOTO :EOF                                )
        
           IF NOT EXIST "%rep%"                         (
              ECHO.
              ECHO "%rep%": Repertoire inconnu.
              ECHO.
              SET "rep="
              GOTO CONTROL_REP                         )
        rem Fin du Sous-programme. Retour après la commande: CALL :CONTROL_REP
            GOTO            :EOF
        rem --------------------------------------------------------------------
        
        
        
        rem ------------------------------------------------------------------------
        rem Sous-programme de construction du nom du repertoire passé en paramètres
        rem  par concaténation dans la variable rep des noms séparés par un espace.
        rem ------------------------------------------------------------------------
        
        :LOOP_PARAM
        
            IF NOT "%1"     ==     ""         (
               SET  "rep=!rep!!separ_dos!%1"
               SET  "separ_dos= "
               SHIFT
               GOTO LOOP_PARAM                 )
        rem Fin du Sous-programme. Retour après la commande: CALL :LOOP_PARAM
            GOTO            :EOF
        rem --------------------------------------------------------------------


        1. merci a toi

          je travaille dessus par ce que c'est un peu compliquer comme ta la fait mais j'ai compris.
          faut que je passe une petite journé dessus par ce que les commande que tu a mis
          on les a pas appris et je pense que notre prof les connai même pas

          merci a bientôt.
          1. bonjour

            moi j'ai fait ca mais le problème c'est que qu'an je tape un repertoire ca marche pas pourquoi?
            je croi que pour commprendre le tien il me faut un peu plus de temps.
            tu peut m'aider ?

            @echo off
            :debut
            cls
            echo.
            echo Que voulez vous faire du repertoire ?
            echo.
            echo.
            echo 1 . l'affichager
            echo.
            echo 2 . le sauvegarder
            echo.
            echo 3 . le supprimer
            echo.
            echo.
            set/P choix= Faites votre choix (1.2.3)
            if "%choix%"=="1" goto aff
            if "%choix%"=="2" goto sauv
            if "%choix%"=="3" goto supp
            echo valeur non conforme : tapez 1 . 2 ou 3
            pause
            goto debut
            :aff
            if "%1"=="" goto rep
            if exist %1\nul goto dir
            :erreur
            echo reprtoire inexistant
            pause
            goto debut
            :rep
            echo.
            set /p rep=Entrez un nom de repertoire
            if not exist %rep% goto erreur
            dir %rep%
            pause
            :dir
            cd %1
            dir
            pause
            goto debut
            :sauv
            if "%2"=="" goto rep
            if exist %2\nul goto DIR
            :erreur
            echo reprtoire inexistant
            pause
            goto debut
            :rep
            echo.
            seT /p SAUV=Entrez un nom de repertoire a sauvgarder
            if not exiSt %SAUV% goto erreur
            cd %SAUV%
            dir
            pause
            goto debut
            :dir
            cd %2
            XCOPY "%rep%" "%Save_rep%" /E
            pause
            goto debut
            :supp
            if "%3"=="" goto rep
            if exist %3\nul goto DIR
            :erreur
            echo repertoire inexistant
            pause
            goto debut
            :rep
            echo.
            set /p supp=Entrez un nom de repertoire a supprimer
            if not exist %supp% goto erreur
            cd %supp%
            dir pause
            goto debut
            :dir
            cd %3
            rd "%rep%"
            pause
            goto debut
            1. Bonsoir,

              Selon moi certaines choses ne vont pas dans ton programme :

              1) Le nom de paragraphe :dir apparaît à plusieurs reprises. Un nom de paragraphe permet un débranchement de la logique d'exécution vers une séquence d'instructions du programme qui est
              subordonnée à ce nom de paragraphe, en conséquence, il ne peut apparaître ainsi nommé :dir qu'une seule fois
              (mais par contre il peut être référencé par exemple , par un ordre GOTO, à plusieurs endroits du programme).
              Ce que tu as tenté de créer de cette façon c'est ce qui est fait avec les ordres CALL dans mon exemple. au
              moment (dans ta logique d'exécution) où tu as besoin d'exécuter une séquence d'ordes tu l'appelles avec l'ordre CALL, elle est exécutée, et à la rencontre d'un ordre GOTO :EOF (présent dans cette séquence appelée), la logique d'exécution se rebranche sur l'ordre qui suit le CALL d'appel. Ca me semble plus simple
              à comprendre et surtout à mettre en oeuvre qu'une série de GOTO qu'il est bien difficille de gérer.

              2) Je n'ai pas très bien compris l'utilisation que tu fais des paramètres de passation %1, %2, %3. Tu sembles considérer qu'ils vont de pair avec les valeurs des 3 possibilités de choix du menu 1, 2, 3. Chaque paramètre de passation est positionnel relativement à celui ou ceux qui le précède(nt). %1 est présent (à une valeur différente de "") si une valeur et effectivement codée à la suite du nom du batch.
              ex: nom_du_batch c:\ (dans ce cas %0 vaut nom_du_batch et %1 vaut c:\)
              De même %2 n'a de réalité (différent de "") que si %1 est effectivement codé :
              ex: nom_du_batch c:\ c :\documents..\ (dans ce cas %0 vaut nom_du_batch,
              %1 vaut c:\ et %2 vaut c :\documents....\
              ) et ainsi de suite jusqu'à %9 au maximum. Mais si je code
              de la façon suivante à l'appel (sous l'invite de commandes) :
              ex: nom_du_batch c :\documents..\ (dans ce cas %0 vaut nom_du_batch,
              %1 vaut c :\documents....\
              ) %2 n'existe pas (plus) !
              Ta façon de procéder laisserait présumer que %1 %2 et %3 sont systématiquement codés à l'appel, avant
              même de connaître le choix 1, 2, ou 3, qui va être effectué.

              Il y a au moins cela à corriger, je pense. Autrement je l'ai fait tourner un peu en affichage (choix 1), ça donne un résultat qui peut être considéré comme satisfaisant compte tenu de l'état d'avancement (non finalisé) du travail.