Tom's Guide > Forum > Programmation > [BATCH] Sa marche pas .... commande + script !

[BATCH] Sa marche pas .... commande + script !

Forum Programmation : [BATCH] Sa marche pas .... commande + script !

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bon voila alors mon problem est le suivant :

on ne peu pas mettre de goto lorsque que l'on est dans une "boucle for" ..... comment faire dans ce cas ?? esqu'il y a une autre commande à utiliser ?

Voici ce que j'aimerais faire :

Code :
  1. for /F "tokens=1,1* delims=" %%i in (log.txt) do (
  2. if %evite%==aucun goto suite
  3. if "%%i"==%evite%* goto fin
  4. suite
  5. move /y "%%i" "%destination%"
  6. :fin
  7. )



Etcomment faire pour que la commande : "cls" n'efface pas tout ce qu'il y a d'écris mais seulmement les 2 ligne au dessus de la commande ...
Esque c'est possible ?

Si vous pouviez m'aider ....
Merci !

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

ah bon ? on peut pas mettre de goto dans un FOR...

Sinon tu peux tout mettre dans un IF en utilisant les parenthèses non ?

Et si tu veux sortir de la boucle il faut faire une variable booléenne:

Code :
  1. set termine=faux
  2. for /F "tokens=1,1* delims=" %%i in (log.txt) do (
  3. if %termine%==faux (
  4.   'traitement ici
  5.   'a la place d'un goto exeterieur mettre set termine=vrai
  6. )
  7. )


Répondre à CRicky

C'est quoi mon problem dans ce script :

Code :
  1. for /F "tokens=1,1* delims=" %%i in (log.txt) do (
  2. if not "%%i"=="%evite%*" move /y "%%i" "%destination%"
  3. echo .
  4. )



je vois pas du tout !! Pourtant meme si %%i==%evite%* sa effectue quand meme le "move" !!
De plus à la fin de la "boucle for" ma fenetre DOS se ferme !

Merci !

Répondre à p2pMan

est-tu certain que c'est égal ?
si %%i=azerty et %evite%=azerty
tu compares "azerty" et "azerty*" => il y a un caractère en plus différent, donc ça colle pas.

Répondre à CRicky

Alors je m'explique : non je ne suis pas sur que ce soir egal !
Ce que j'aimerais comparer c'est sa par exemple :

set evite=C:\258\
set var2=C:\258\fichier.txt

don cdans ce cas je ne veu pas que mon "move" soit executer car justement le chemin de "%var2%"=="%evite%*" !! L'étoile que je met à la fin c'est juste pour lui dire de comparer que le début de la chaine de caractère !

et au contraire si

set evite=C:\WINDOWS\
set var2=C:\Program Files\

Comme "%evite%*" n'est pas egal à "%var2%" alors le "move" est executé !

mais il y un problem quelque part ! Mais je vois pas ou ! :-(

Répondre à p2pMan

Enfaite c'est carément le "if...." qui est mal compris dans un "for" c'est à cause du "if" que tout bug et que le script ne s'execute pas coréctement!!

Mais dans ce cas moi je vois vraiment pas comment faire apars stocker tout les direction dans un fichier différent !! :-o

Répondre à p2pMan

Bon enfaite le "bug" qui férmé le prog c'été une de mes commande qui n'était pas conforme :-D

Mais mon "if not" n'est toujours pas pris en compte !! Toute les commande sont executé quel ma variable soi égal ou non à l'autre variable !

Répondre à p2pMan

les IF ne prennent pas les caractères génériques comme *.
Le '*' est le caractère '*' et pas "n'importe quel texte".
mais ton ton truc, ça ne serait pas plus simple d'utiliser la commande FIND sur ton fichier ?
en redirigeant la sortie dans un autre fichier et tu as la liste de tous les fichiers à déplacer.

pour tester le IF dans le FOR, teste IF "0"=="0" et IF "0"=="1". Si ça ça marche, le IF marche bien.

Répondre à CRicky

Quesque tu dis !! :-D

Bien sur que "if" reconnait le "*" ! Tien essaye pour voir :

Code :
  1. if exist *.txt echo ta vue qu'il reconnait
  2. echo t'avais raison !
  3. pause



Bien sur place toi dans un endroit ou i ly a des fichier ".txt" !! 8-)

Répondre à p2pMan

oui mais non :-P

C'est le IF EXIST qui interprète les *, pas les IF simples:

Code :
  1. if "aaaa111"=="aaaa*" echo affiche ou affiche pas ?


Répondre à CRicky

ah !! (ne jamais contre dire le grand cricky !)

Bon ok .... ba dans ce cas je fais quoi moi ? .....

car : "C:\126\" n'est pas égal à "C:\126\fichier.txt" alors que justement moi j'ai besoin que ce soir egal !!

Mais bon sa c'est un exemple car je ne connais pas le ... "chemin" ...... :-?

Répondre à p2pMan

A oui et tant que j'y suis : vous saurez pas comment prendre le nom de l'utilisateur en cour ...... c'est à dire le nom de l'utilisateur sous le quel le batch est executé ??

ps : ne me dite pas %userprofile%[/color] car sa me donne tout un chemin pas seulement le nom de l'utilisateur et je ne sais pas comment extraire que le nom dd'utilisateur du chemin donné

Répondre à p2pMan

Et ce que je disais avec la commande FIND, tu ne peux pas t'en sortir ?
sinon prend le début de la variable.
si tu vex tester "toto*" avec le contenu d'une variable VAR, tu peux comparer:
IF "%VAR~0,4%"=="toto" echo Ok
ça découpe la variable VAR en commençant à l'index 0 et en prenant 4 caractères.
Donc si VAR=totozearzer, ben le test passera ;-)

Pour l'utilisateur, je dirai %username% (j'ai fait un simple SET pour avoir la liste de toutes les variables ;-) )

Répondre à CRicky

Aaaaa Magnifico !! respect total !! Je m'incline devant ta grandeur !

Encore une fois merci à toi Cricky !

Puis ba à bientot pour de nouvelles questions ....
:-D

Fausse joi !! je vien de m'appercevoir d'un truc : puisque je ne connais pas le chemin qui sera définit par l'utilisateur : il peu définir : "C:\Program Files\blablabla\blabla\123\" etc ...... donc je ne sais pas à combien caractère comparé

Car si je met par exemple 4 caractère il me les comparera : Alors il trouvera que c'est egal alors que sa se trouve le second chemin à comparer est : "C:\Program Files\blablabla\blabla\258\" qui n'est pas égal à "C:\Program Files\blablabla\blabla\123\"

En faite il faudrait trouver comment lui dire de comparer le chemin entrer par l'utilisateur avec le chemin avant le nom du fichier. exemple : C:\123\258.txt et C:\123\

mmmm tu vois ? :-D

Répondre à p2pMan

lol, ne me prend pas pour un dieu, c'est juste l'expérience ;-)
D'autant que tu en connais autant que moi maintenant :-D

Répondre à CRicky

J'ai fé un edit de la réponse précedente ! regarde

Répondre à p2pMan

Ouais, ben ça je vois pas trop comment faire en batch.
Il faudrait analyser la chaine, avec un for /F en prenant comme token=/ pour découper en répertoire.
Mais là c'est pareil, il y a un problème sur le nombre de répertoire qui est variable.

Sinon sur chaque fichier, refaire un DIR dessus mais sans mettre l'option qui permet d'afficher tout le path, juste le nom, et là tu peux faire une comparaison sur le fichier. Mais bon, tu as le même problème si tu veux faire un filtre du type "debut*milieu*fin". Pour "debut*" et "*fin" pas de problème.
Je sais pas si ça t'aide, on sait jamais :-D

Répondre à CRicky
Tom's Guide > Forum > Programmation > [BATCH] Sa marche pas .... commande + script !
Aller à :

Il y a 771 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens