Page 1 sur 1

Invite et addition

Posté : 29 août 2009 13:38
par Kiven
Bonjour,

Je cherche à faire des opérations sur des fichiers contenus dans un répertoire. Ces opérations requièrent une information que je dois rentrer à la main.
Voici mon script :

Code : Tout sélectionner

@echo off
set DIR=C:\Temp\1\
set /A total_delay=0
for /F "delims=" %%X in ('dir /O:N /B "%DIR%*.avi"') do (
    set /p delay=Delay %%X ?
    set /A total_delay+=%delay%
    echo %total_delay%
    :: ligne de commande qui effectue le traitement sur le fichier courant, et qui devrait utiliser %total_delay% pour l'un de ses paramètres
)
 
Je veux donc récupérer une valeur dans "delay", et l'additionnée à chaque tour de boucle avec "total_delay".
Malheureusement quelque chose ne va pas (je pense que ça vient de la syntaxe de la boucle "for"). Le "echo" ne marche même pas, et j'ai un message d'erreur qui indique "Il manque une opérande". Par ailleurs, si j'enlève le commentaire de la ligne de commande, le message d'erreur est différent (" ) était inattendu").
Bref, je pense qu'il y a un problème de syntaxe quelque part mais je ne vois pas où chercher.

Merci pour votre aide !

Re: Invite et addition

Posté : 08 sept. 2009 08:40
par Laddy
Bonjour
corrige peut être ceci :

Code : Tout sélectionner

set total_delay=0
A quoi correspond ceci dans ta boucle ??
je pense que c'est un traitement à faire avant et non dans la boucle
set /p delay=Delay %%X ?

Re: Invite et addition

Posté : 11 sept. 2009 16:35
par Devatoria
Salut !

Alors, tout d'abord, pour faire des opérations et modifier la valeur d'une variable dans une boucle, il faut activer les DelayedExpension :

Code : Tout sélectionner

setlocal enableDelayedExpansion
Met ce code en haut de ton script (en dessous du echo off). Cependant, lorsque tu utilise les expensions, tu ne dois plus utiliser des %variable% pour afficher la valeur de ta variable mais : !variable!. (sauf pour les %%X, variable de boucle).

Car, pour information, si dans un "set /a" tu utilises le signe "%", il croit que c'est un signe arithmétique, c'est pour ça qu'il te dis qu'il manque un opérande.

Code : Tout sélectionner

@echo off
setlocal enableDelayedExpansion
set DIR=C:\Temp\1\
set /A total_delay=0
for /F "delims=" %%X in ('dir /O:N /B "%DIR%*.avi"') do (
    set /p delay=Delay %%X ?
    set /A total_delay+=!delay!
    echo !total_delay!
    :: ligne de commande qui effectue le traitement sur le fichier courant, et qui devrait utiliser %total_delay% pour l'un de ses paramètres
)
Ton code devrait donner quelque chose comme ceci.

En espérant t'avoir aidé, tiens nous au courant, bye ;)