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

pb de chaines

3 réponses
Avatar
moi
bonjour,

je veux mettre au point un script ( cmd)
qui fait subir à plusieurs répertoires le même traitement
pour utiliser une boucle et une unique "procédure"
je tente de concaténer les chaines mais
je n'arrive pas au résultat attendu ...
la manipulation des chaines m'échappe ...

je donne plus bas un extrait significatif
je pense que les procédures sont bonnes...
et vous fais donc grâce du reste ;o)

en revanche la ligne de la boucle
FOR /L %%q IN (1,1,8) DO
ne fonctionne pas car les variables
ne prennent pas les bonnes valeurs au bon moment ...


merci d'avance,

HB
========================================
REM une série de répertoire

set ch1=F:\...\Chemin1
set ch2=F:\...\Chemin2
set ch3=
etc ...
set ch8=F:\...\Chemin8

rem traitement pour chacun, si toutefois il existe ...

for /l %%q in (1,1,8) do if exist %CH%%q% call :traite1 %CH%%q%
goto suite1

rem Procédure
:traite1
cd %1
rem traitement des sous répertoire

for /d %%n in (*) do call:sousrep1 "%%n"
rem vide le niveau racine
del /q "%1\*"
goto :eof


etc ...
========================================

3 réponses

Avatar
Méta-MCI \(MVP\)
Bonjour !

Pour pouvoir faire de l'indirection de variable, dans les batchs, il
faut activer "'l'expansion retardée".
Voici un exemple d'utilisation, avec une revision (libre) de ton script
:

echo off
SetLocal
SetLocal EnableDelayedExpansion

set ch1=F:...Chemin1
set ch2=F:...Chemin2
set ch3 etc ...
set ch8=F:...Chemin8

for /L %%q in (1,1,8) do call :traite1 ch%%q
endlocal
goto :EOF

:traite1
if exist "!%*!" (
cd /D"!%*!"
for /D %%n in (*) do echo call :sousrep1 "%%n"
echo del /q "%**"
)
goto :eof



@-salutations
--
Michel Claveau
Avatar
MCI \(ex do ré Mi chel la si do\) [MVP]
Re !

J'ai commis qq bourdes, dont celle-ci :

remplacer :
echo del /q "%**"
par :
echo del /q "!%*!*"

@-salutations

Michel Claveau
Avatar
moi
Notre ami MCI (ex do ré Mi chel la si do) [MVP] tapota :

Re !

J'ai commis qq bourdes, dont celle-ci :

remplacer :
echo del /q "%**"
par :
echo del /q "!%*!*"


bonjour,


Merci beaucoup,

j'avais tenté !%q!
mais sans le setlocal EnableDelayedExpansion
...

L'art du batch est délicat
et je n'ai encore jamais trouvé
de document explicatif "clair" ...
( clair pour moi, bien sûr ;o)
(contrairement au VBS qui est "très documenté" sur le web )

C'est donc "un peu au pif" que je tente d'avancer..

Merci encore,

HB