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

  • Votes
  • Date
  • Date décroissante
  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.
  2. 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,

      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. 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. 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. 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=" )