Programmation en DOS - Fonction IF et FOR

Bonjour à tous,
Alors je sais que la prog en dos c’est un peu dépassé mais j’ai besoin de faire un petit script tout bête qui évidemment ne veut pas fonctionner.

Le but est d’aller chercher un caractere dans un fichier 1.txt, comparer ce caractere avec un autre fichier ref.txt, si les deux valeurs sont égales, lancer un batch comprat.bat

Mon prog ressemble à cela :

FOR %%c in (C:\chemin\1.txt) DO (echo %%c)
FOR %%b in (C:\chemin\ref.txt) DO (echo %%b)
IF %%b EQU %%C (goto LAUCHA) else (goto FIN)
:LAUCHA
comprat.bat
:FIN
pause
exit

En plus de cela, j’aimerais qu’il se lance de maniere automatique toutes les minutes par exemple… Et là, la tempo, je vois mal…

En tout cas, les lignes ci-dessus ne fonctionne pas car il “pause” à chaque fois…

Merci de vos lumières !!!

Là tu compares les noms des fichiers, pas leur contenu
Pour comparer les contenus, il faut que tu utilises la commande FC
Et si tu veux que tes boucles soient efficaces, il faut que tu les imbriques, ce qui n’est pas le cas actuellement

Quel est l’intérêt d’un GOTO vers la ligne qui suit immédiatement ?

IF et FOR m’ont toujour donné mal au crane, si non je plussoi avec gcc pour la comparaison des noms de fichier a la place de leur contenu par la commande FC …

pour la temporaisation utilise le plannificateur de taches …
s’il ne te conviens pas utilise l’outil Sleep.exe qui te permettra de mettre une pause dans ton programme en secondes, a la suite de quoi tu fait un GOTO vers le debut du script …

non la commande for sur un fichier texte agit sur son contenu
mais déjà la commande ce serait plutôt
FOR /F %%c in (C:\chemin\1.txt) DO (echo %%c)

un premier problème c’est que %%c n’est pas mémorisé pour les commandes suivantes

la 3ème commande ici ne passera pas car il se souvient plus de %%c

il faut a chaque boucle attribuer la valeur de la variable avec la commande set

là c’est bon

un autre problème c’est comment est composé le fichier texte parce qu’il faut bien savoir quel élément on va prendre dans ce dernier
l’exemple ci dessus ne fonctionne qu’avec un seul mot/élément dans chaque fichier.txt (il prendra le dernier)
Edité le 26/01/2008 à 11:33

Zarathoustra ->
Non, la commande FOR telle qu’elle était proposée (donc sans le /F) agit bien sur le nom de fichier et non sur son contenu.
Par contre d’accord avec toi sur la méthode avec le /F, à condition comme tu le dis de bien cibler le contenu à extraire.

Pour ce qui est de ce que tu proposes,

je ne pense pas que ca fonctionne :
Tu vas épuiser la première boucle avant de commencer la deuxième
Donc %alpha% aura toujours la même valeur.

Et en plus je n’ai pas testé, mais il est fort possible que cette valeur soit la première et non la dernière comme on pourrait s’y attendre, parce que le fonctionnement correct d’un SET dans une boucle FOR doit probablement obliger à déclarer explicitement l’utilisation de l’expansion retardée, ce dont tu ne parles pas.

1/ oui il faut /F :jap:
2/j’ai pas voulu dire autre chose c’était juste une demo de set et pour montrer que autrement la variable n’est pas mémorisée :wink:
3/sur mes test ça donne la dernière valeur :oui:

finalement le plus dur est de cibler la valeur à extraire on est d’accord :slight_smile:

En fait, je m’aperçois que j’avais mal dû lire le sujet …

Je me suis fait bêtement abuser par le FOR
Et je pensais que 1.txt était donné à titre d’exemple, et qu’il y avait plusieurs fichiers de ce genre à tester successivement (1.txt, 2.txt, 3.txt …, sinon, pourquoi l’appeler “1” ?).
C’est pour ça que je parlais de boucles imbriquées.
Mais comme tu fais ton code (et finalement je pense que tu as raison), on ne teste qu’un seul fichier, donc première ou dernière valeur pour %alpha% c’est évidemment la même chose.

Les deux solutions devraient être équivalentes

FOR /F %%c in (C:\chemin\1.txt) DO set alpha=%%c
FOR /F %%b in (C:\chemin\ref.txt) DO set beta=%%b
if %alpha%==%beta% comprat
pause
exit

FC C:\chemin\1.txt C:\chemin\ref.txt
if errorlevel==1 goto FIN
comprat
:FIN
pause
exit