Prog .bat

Résolu
yoann.15987 Messages postés 20 Statut Membre -  
cchristian Messages postés 928 Statut Membre -
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. yoann.15987 Messages postés 20 Statut Membre 1
     
    personne veux m'aider ???
    -1
  2. cchristian Messages postés 928 Statut Membre 131
     
    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
    1. cchristian Messages postés 928 Statut Membre 131
       
      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=" )

      -1
      1. cchristian Messages postés 928 Statut Membre 131 > cchristian Messages postés 928 Statut Membre
         
        RECTIFICATIFS (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=" )
        -1
  3. yoann.15987 Messages postés 20 Statut Membre 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
  4. yoann.15987 Messages postés 20 Statut Membre 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. cchristian Messages postés 928 Statut Membre 131
     
    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
  7. yoann.15987 Messages postés 20 Statut Membre 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
  8. yoann.15987 Messages postés 20 Statut Membre 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
    1. cchristian Messages postés 928 Statut Membre 131
       
      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.
      -1