please ....help : probleme de set - Shell/Batch - Programmation
Marsh Posté le 12-04-2006 à 09:51:19
correction de mon derniers script (l'avé un cthi pb )
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"
Marsh Posté le 12-04-2006 à 12:52:40
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.
Marsh Posté le 12-04-2006 à 13:12:24
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
Marsh Posté le 12-04-2006 à 13:34:06
Code :
|
Code :
|
Marsh Posté le 12-04-2006 à 13:40:14
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
Marsh Posté le 12-04-2006 à 13:43:01
Tu peux refaire en un français correct ?
J'ai vraiment du mal avec le SMS. Désolée.
Marsh Posté le 12-04-2006 à 13:50:46
: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)
Marsh Posté le 12-04-2006 à 14:22:20
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 )
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
Marsh Posté le 12-04-2006 à 14:28:45
oua .... j'ai bien suivi ton exemple et : NICKEL
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
Marsh Posté le 12-04-2006 à 14:30:45
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 rocess %%i
)
)
::affiche le contenu du fichier de sortie a l'ecran
TYPE "sortie.txt"
::on supprime le fichier
ERASE "sortie.txt"
goto end
rocess
::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
Marsh Posté le 12-04-2006 à 14:41:48
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-)
Marsh Posté le 12-04-2006 à 15:06:26
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 :
|
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 :
|
Enfin, pour la comparaison des chaînes, les wildcards ne sont pas supportés.
Voilà
Marsh Posté le 12-04-2006 à 15:32:08
mon probleme est resolu
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é )
Marsh Posté le 12-04-2006 à 09:11:16
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