Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Programmation DOS

2 réponses
Avatar
Serge Nazarian
Bonjour,

Il a-t-il parmi vous des spécialistes de la programmation DOS ?
Voici mon problème : comment réaliser la structure suivante ?
for i in <liste> do if <condition> then <plusieurs instructions> endif
endfor

L'exemple réel est le suivant mais il ne marche hélas pas. Ce batch doit
être appelé avec deux arguments.
*****************
@echo off
mp "%1.mp"
for %%i in (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ) do if not
exist %1.%%i goto end
tex mpimage %1.%%i,%2
dvips -E mpimage.dvi -o %1.%%i.eps
del %1.%%i
:end
del %1.mpx
del %1.log
del mpimage.log
del mpimage.dvi
*****************

Merci pour toute aide.
Cordialement,
--
Serge Nazarian


---
Courrier certifié sans virus.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.537 / Virus Database: 332 - Release Date: 07/11/2003

2 réponses

Avatar
Jean-Claude BELLAMY
Serge Nazarian s'est ainsi exprimé:
Il a-t-il parmi vous des spécialistes de la programmation DOS ?


Non, ce n'est pas de la "programmation DOS" !
De la programmation de COMMANDES, tout simplement.
Car il n'y a pas de DOS là-dedans (tu as posté ton message dans
microsoft.public.fr.winnt) !


Voici mon problème : comment réaliser la structure suivante ?
for i in <liste> do if <condition> then <plusieurs instructions> endif
endfor

L'exemple réel est le suivant mais il ne marche hélas pas. Ce batch
doit être appelé avec deux arguments.
*****************
@echo off
mp "%1.mp"
for %%i in (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ) do if not


exist %1.%%i goto end

NORMAL que ça ne marche pas !
En admettant que le 1er argument passé soit "toto", si le fichier toto1
n'existe pas, on QUITTE IMMÉDIATEMENT la boucle en raison du GOTO!
Donc dans ce cas on ne teste absolument pas l'existence de "toto2", "toto3",
.....

Il FAUT donc que tu INVERSES ton test :
...
for %%i in (1 2 ...20) do if exist %1.%%i tex mpimage %1.%%i,%2 & dvips -E
mpimage.dvi -o %1.%%i.eps & del %1.%%i
del %1.mpx
del %1.log
del mpimage.log
del mpimage.dvi

Le caractère "&" permet d'exécuter PLUSIEURS commandes à la suite (comme
dans tout shell UNIX)

Personnellement, je n'aime pas beaucoup car cela donne des lignes
interminables, et n'est pas très lisible.

On peut utiliser des parenthèses :
...
for %%i in (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20) do if exist
%1.%%i (
tex mpimage %1.%%i,%2
dvips -E mpimage.dvi -o %1.%%i.eps
del %1.%%i
)
del %1.mpx
del %1.log
del mpimage.log
del mpimage.dvi

Mais il faut faire attention, la syntaxe avec parenthèses est assez
susceptible, en particulier si on utilise la clause "ELSE"
(taper "if /?" pour plus de détails)


Il existe une 3ème possibilité, c'est celle de passer par un sous-programme
batch :
...
for %%i in (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20) do call
test.bat %1 %2 %%i
del %1.mpx
del %1.log
del mpimage.log
del mpimage.dvi


Et le fichier "test.bat" contiendra ceci :
@echo off
if not exist %1.%3 exit
tex mpimage %1.%3,%2
dvips -E mpimage.dvi -o %1.%3.eps
del %1.%3


La 3ème syntaxe a l'avantage d'être plus universelle, car l'utilisation de
"&" ou de parenthèses n'est pas reconnue sous DOS (le vrai!) et Win9x
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
*
Avatar
Jean-Claude BELLAMY
Serge Nazarian s'est ainsi exprimé:
Il a-t-il parmi vous des spécialistes de la programmation DOS ?


Non, ce n'est pas de la "programmation DOS" !
De la programmation de COMMANDES, tout simplement.
Car il n'y a pas de DOS là-dedans (tu as posté ton message dans
microsoft.public.fr.winnt) !


Voici mon problème : comment réaliser la structure suivante ?
for i in <liste> do if <condition> then <plusieurs instructions> endif
endfor

L'exemple réel est le suivant mais il ne marche hélas pas. Ce batch
doit être appelé avec deux arguments.
*****************
@echo off
mp "%1.mp"
for %%i in (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ) do if not


exist %1.%%i goto end

NORMAL que ça ne marche pas !
En admettant que le 1er argument passé soit "toto", si le fichier toto1
n'existe pas, on QUITTE IMMÉDIATEMENT la boucle en raison du GOTO!
Donc dans ce cas on ne teste absolument pas l'existence de "toto2", "toto3",
.....

Il FAUT donc que tu INVERSES ton test :
...
for %%i in (1 2 ...20) do if exist %1.%%i tex mpimage %1.%%i,%2 & dvips -E
mpimage.dvi -o %1.%%i.eps & del %1.%%i
del %1.mpx
del %1.log
del mpimage.log
del mpimage.dvi

Le caractère "&" permet d'exécuter PLUSIEURS commandes à la suite (comme
dans tout shell UNIX)

Personnellement, je n'aime pas beaucoup car cela donne des lignes
interminables, et n'est pas très lisible.

On peut utiliser des parenthèses :
...
for %%i in (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20) do if exist
%1.%%i (
tex mpimage %1.%%i,%2
dvips -E mpimage.dvi -o %1.%%i.eps
del %1.%%i
)
del %1.mpx
del %1.log
del mpimage.log
del mpimage.dvi

Mais il faut faire attention, la syntaxe avec parenthèses est assez
susceptible, en particulier si on utilise la clause "ELSE"
(taper "if /?" pour plus de détails)


Il existe une 3ème possibilité, c'est celle de passer par un sous-programme
batch :
...
for %%i in (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20) do call
test.bat %1 %2 %%i
del %1.mpx
del %1.log
del mpimage.log
del mpimage.dvi


Et le fichier "test.bat" contiendra ceci :
@echo off
if not exist %1.%3 exit
tex mpimage %1.%3,%2
dvips -E mpimage.dvi -o %1.%3.eps
del %1.%3


La 3ème syntaxe a l'avantage d'être plus universelle, car l'utilisation de
"&" ou de parenthèses n'est pas reconnue sous DOS (le vrai!) et Win9x
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
*