Invite et addition

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

Répondre
Kiven
Batcheur occasionnel
Messages : 1
Enregistré le : 29 août 2009 13:31

Invite et addition

Message 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 !
Laddy
SuperBatcher
Messages : 190
Enregistré le : 04 juil. 2008 13:40

Re: Invite et addition

Message 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 ?
Envie de partager vos programmes :
Poster vos codes sur BatchClipboad.info
Devatoria
Batcheur débutant
Messages : 10
Enregistré le : 10 sept. 2009 10:59
Localisation : Saint-Etienne

Re: Invite et addition

Message 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 ;)
Dev :

BATCH, xHTML 1.0 Strict, CSS, PHP, SQL, ASP.NET, VB.NET, VBS.
Répondre