Prog .bat

Résolu/Fermé
yoann.15987 Messages postés 15 Date d'inscription vendredi 3 octobre 2008 Statut Membre Dernière intervention 28 juillet 2009 - 3 oct. 2008 à 21:31
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 - 13 oct. 2008 à 22:43
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
A voir également:

7 réponses

yoann.15987 Messages postés 15 Date d'inscription vendredi 3 octobre 2008 Statut Membre Dernière intervention 28 juillet 2009 1
7 oct. 2008 à 14:07
personne veux m'aider ???
-1
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
7 oct. 2008 à 23:54
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
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
8 oct. 2008 à 16:03
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
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131 > cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012
8 oct. 2008 à 17:11
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
yoann.15987 Messages postés 15 Date d'inscription vendredi 3 octobre 2008 Statut Membre Dernière intervention 28 juillet 2009 1
8 oct. 2008 à 21:07
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
yoann.15987 Messages postés 15 Date d'inscription vendredi 3 octobre 2008 Statut Membre Dernière intervention 28 juillet 2009 1
10 oct. 2008 à 20:27
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
11 oct. 2008 à 17:59
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
yoann.15987 Messages postés 15 Date d'inscription vendredi 3 octobre 2008 Statut Membre Dernière intervention 28 juillet 2009 1
11 oct. 2008 à 23:30
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
yoann.15987 Messages postés 15 Date d'inscription vendredi 3 octobre 2008 Statut Membre Dernière intervention 28 juillet 2009 1
13 oct. 2008 à 20:43
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
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
13 oct. 2008 à 22:43
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