Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2512 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  please ....help : probleme de set

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

please ....help : probleme de set

n°1344703
b40b4b
Posté le 12-04-2006 à 09:11:16  profilanswer
 

voila j'ai fais un pti batch (sous windaubeXP) qui doit me ressortir les noms des repertoires contenant un fichier "nom_fichier"
et me mettre ces repertoires dans un fichier texte créé a cette occasion .... jusque la tout allé bien, voila mon script :
 
:://on retire l'affichage successifs des repertoires parcourus
@ECHO OFF
FOR /R %%i IN (.) DO (
             IF EXIST %%i\"nom_fichier" (
                    IF EXIST "sortie.txt" (
                            ECHO %%i>>"sortie.txt"
                    ) ELSE (ECHO %%i>"sortie.txt"
                    )
             )
)
:://on affiche le contenu des sorties dans la fenetre MsDos
TYPE "sortie.txt"
 
maintenant mon souci, c'est que je ne veut conserver que les 10premiers des 12 derniers caractères
(car jme fiche d'avoir le chemin complet du dossier, jve juste le dernier repertoire du chemin et
ces repertoires ont toujours 10 caractères)
en utilisant set ca ma donné :
 
@ECHO OFF
FOR /R %%i IN (.) DO (
             IF EXIST %%i\"nom_fichier" (    
                    set pat=pat %%i
                    set pat=%pat:~-12%
                    set pat=%pat:~0,-2%
                    ::%%i=%pat%
                    echo %pat%
                    IF EXIST "sortie.txt" (
                            ECHO %%i>>"sortie.txt"
                    ) ELSE (
                            ECHO %%i>"sortie.txt"
                    )
                    set pat=
             )
)
TYPE "sortie.txt"
 
jvois pas comment faire autrement pour la gestion des noms de dossier...
mon script ne marche pas : je n'ai que le dernier repertoire trouvé dans mon fichier de sortie
(et je l'ai autant de fois qu'il trouve des dossier correspondant)
si vous avez une idée .... merci d'avance

mood
Publicité
Posté le 12-04-2006 à 09:11:16  profilanswer
 

n°1344754
b40b4b
Posté le 12-04-2006 à 09:51:19  profilanswer
 

correction de mon derniers script (l'avé un cthi pb :p )
mais bon il marche pas, si vous aviez une iD du pourkoi ...ou du comment ...
 
 
@ECHO OFF
FOR /R %%i IN (.) DO (
             IF EXIST %%i\"modelisation_2.par" (  
                    set pat=%%i
                    set pat=%pat:~-12%
                    set pat=%pat:~0,-2%
                    IF EXIST "sortie.txt" (
                            ECHO %pat%>>"sortie.txt"
                    ) ELSE (
                            ECHO %pat%>"sortie.txt"
                    )
                    set pat=
             )
)
TYPE "sortie.txt"

n°1344914
wackevat
Posté le 12-04-2006 à 12:52:40  profilanswer
 

Ca concerne l'expansion retardée des variables :
set /?
pour le paragraphe concerné.
 
Il faut donc soit utiliser la méthode mentionnée dans ledit paragraphe, soit utiliser une sous-procédure avec %%i comme paramètre.

n°1344927
b40b4b
Posté le 12-04-2006 à 13:12:24  profilanswer
 

ba ouai, j'ai deja lu 3 fois le "set /?" et je ne posterai pas un message si je n'avais pas TOUT essayé pour resoudre mon probleme moi-meme...
 
mais honnetement j'ai pas compris la subtilité de l'expension des variable d'environment, donc si t'avais une aide (autre ke set /?)
 
sinon est-ce que tu pourrait m'en dire plus sur une sous procedure avec %%i en parametre 8-) car je blok vraiment la ...
 
merci

n°1344945
wackevat
Posté le 12-04-2006 à 13:34:06  profilanswer
 

Code :
  1. setlocal ENABLEDELAYEDEXPANSION
  2. for /l %%i in (1,1,5) do (
  3.   set /a j=%%i+1
  4.   echo !j!
  5. )


 

Code :
  1. for /l %%i in (1,1,5) do (
  2.   call :process %%i
  3. )
  4. goto end
  5. :process
  6. set /a j=%1+1
  7. echo %j%
  8. :end

n°1344949
b40b4b
Posté le 12-04-2006 à 13:40:14  profilanswer
 

merci pour la rapidité de ta reponse :)
 
un dernier truk bidon (ouai c vraiment bidon ca)
 
1 - set /P test=
2 - if "%test%"=="*mot*" (echo yes) else (echo Hell Nooooo !!!)
3 - set test=
 
la ske jve c'est ke l'utilisateur me rentre une chaine et si dans cette chaine on trouve une occurence de 'mot' on repond yep, le probleme c'est k'il me repond yep uniquement si la chaine fourni est *mot* ...
(pourtant j'pensais que l'*' était le caractère spécial ki remplacait n'importe quelle chaine de caractère, meme la chaine vide ....
 
merci encore

n°1344951
wackevat
Posté le 12-04-2006 à 13:43:01  profilanswer
 

Tu peux refaire en un français correct ?
 
J'ai vraiment du mal avec le SMS. Désolée.

n°1344960
b40b4b
Posté le 12-04-2006 à 13:50:46  profilanswer
 

:s désolé
 
je voudrai que ce shell me reponde "yep" a partir du moment ou dans la phrase qu'il tape il y a le mot "mot"
exemple : "je trouve pas de mot pour exprimer mon désaroi"
 
alors j'ai fais le pti script avec mot entre deux etoiles en pensant que l'etoile permettai comme sous linux de lui spécifier n'importe quel chaine de caractères, meme une chaine vide ...
 
pourtant avec ce script la possibilité davoir le prompt repondant "yep"
c'est de rentré la chaine *mot* dans tout les autres cas il me répond
non ...
 
(en gros la question c'est quel est le caractère qui spécifie n'importe quel chaine de caractères et comment l'utiliser correctement)

n°1344984
b40b4b
Posté le 12-04-2006 à 14:22:20  profilanswer
 

bon, pour le caractère spécial * c'est pas grave j'vai trouver un moyen de gérer, par contre ... pour le batch que tu ma donné avec le localexpension
 
c'est trés bien tout ca , mais comme j'modifie ma variable 3fois de suite, ca ne resoud pas mon probleme :'(
 
                    set pat=%%i
                    set pat=%pat:~-12%
                    set pat=%pat:~0,-2%  
 
si seulement ces 3lignes pouvait fonctionner mon batch serai fini (j'met pas shell de peur de me faire traiter par les puristes :o )
 
en tout cas merci, j'ai mie compris l'expension maintenant et j'aurai jamais pensé a faire un  
                          echo !pat!
tout seul
 
CI-MER ;)

n°1344992
b40b4b
Posté le 12-04-2006 à 14:28:45  profilanswer
 

oua .... j'ai bien suivi ton exemple et : NICKEL :d
jpe pas avoir plus le moral qu'a l'heure actuelle
meme si tu comprends pas le langage SMS, merci merci , un enorme merci
 
tu m'as debloké ca faisait 2 jours que j'étais dessus
 
si y a des personnes interréssé voil

mood
Publicité
Posté le 12-04-2006 à 14:28:45  profilanswer
 

n°1344993
b40b4b
Posté le 12-04-2006 à 14:30:45  profilanswer
 

voila le batch que ca fait au final :
(avec quelques commentaires ;) )
 
 
::suprime l'affichage successif de l'arborescence
@ECHO OFF
::debut de traitement
FOR /R %%i IN (.) DO (
             IF EXIST %%i\"nom_fichier" (  
             call :process %%i                    
             )
)
::affiche le contenu du fichier de sortie a l'ecran
TYPE "sortie.txt"
::on supprime le fichier
ERASE "sortie.txt"
goto end
 
 
:process
::active les extensions de commandes
setlocal ENABLEDELAYEDEXPANSION
set pat=%1
set _pat=%pat:~-12%
set fin_pat=%_pat:~0,-2%
::ecriture des resultats dans le fichier texte de sortie
IF EXIST "sortie.txt" (
      ECHO !fin_pat!>>"sortie.txt"
) ELSE (
      ECHO !fin_pat!>"sortie.txt"
)
 
:end
 
 
 
franchement, jle dirai jamais assez : MEEEEEErCIII :p

n°1345008
b40b4b
Posté le 12-04-2006 à 14:41:48  profilanswer
 

juste comme ca par curiosité, le batch ci-dessus fonctionnera t'il avec une version de windauB autre que la version XP (genre pour un utilisateur sous win9x ou 2000) ???
si vous savez 8-)

n°1345043
wackevat
Posté le 12-04-2006 à 15:06:26  profilanswer
 

Je pense que ça va fonctionner avec 2000 mais pas avec 9x. DOS ne supporte pas certaines fonctionnalités avancées comme l'invite de commandes de Windows.
 
Juste une petite remarque pour tes deux commandes :
set pat=%pat:~-12%
set pat=%pat:~0,-2%
 
La première extrait les 12 derniers caractères de la chaîne.
La deuxième extrait les premiers caractères du résultat précédent sauf les deux derniers.
 
Tu peux alors les combiner en une seule commande :
set pat=%pat:~-12,-2%
 

Code :
  1. setlocal ENABLEDELAYEDEXPANSION
  2. for /l %%i in (1,1,5) do (
  3.   set j=abcdefghijkl%%imno
  4.   echo j=!j:~-12,-2!
  5. )


 
Sinon, si tu appelles une procédure, tu n'as pas besoin d'activer l'expansion retardée. Ton script sera alors (tu as les balises code pour la mise en page sur le forum) :
 

Code :
  1. ::suprime l'affichage successif de l'arborescence
  2. @ECHO OFF
  3. :debut de traitement
  4. FOR /R %%i IN (.) DO (
  5.   IF EXIST %%i\"nom_fichier" (
  6.     call :process %%i
  7.   )
  8. )
  9. ::affiche le contenu du fichier de sortie a l'ecran
  10. TYPE "sortie.txt"
  11. :on supprime le fichier
  12. ERASE "sortie.txt"
  13. goto end
  14. :process
  15. set pat=%1
  16. set pat=%pat:-12,-2%
  17. ::ecriture des resultats dans le fichier texte de sortie
  18. IF EXIST "sortie.txt" (
  19.   ECHO %pat%>>"sortie.txt"
  20. ) ELSE (
  21.   ECHO %pat%>"sortie.txt"
  22. )
  23. :end


 
Enfin, pour la comparaison des chaînes, les wildcards ne sont pas supportés.
 
Voilà ;)

n°1345105
b40b4b
Posté le 12-04-2006 à 15:32:08  profilanswer
 

mon probleme est resolu :d
un grand merci a toi
 
big up nglechau, u rox ;)
 
(dommage pour les wildcards, ca va m'obliger a refaire un traitement, mais deja avec ca, j'suis blindé :p )


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  please ....help : probleme de set

 

Sujets relatifs
Tableau : drole de problème Help pleaseProblème pseudo-frame please help !
MasterMind - Probleme de Rafraichissement.. Please Help!script flash problème - please help
[java] Probleme incomprehensible avec JDOM (long mais help please:'()Problème de Lien, HELP PLEASE
help me please !!!!petit probleme html !!!! code insideDELPHI4 probleme de dates please help me!!!!!!!!!!
Problème avec unJavaScript qui marche pas !.... Help please ....[CGI]: PROBLEME HELP ME PLEASE
Plus de sujets relatifs à : please ....help : probleme de set


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR