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

set variable en numérique + passage de variable

17 réponses
Avatar
---DGI972---
Bonsoir a tous,

J'ai des images tif dans un répertoire qui ont la structures suivantes:
000020001.tif
000020002.tif
etc...
je voudrais les renommer dans la forme suivante:
1020001.tif
1020002.tif

Alors j'ai pensé faire un truc du genre:

For /f "tokens=1-2 delims=." %%m in ('dir /b C:\89\??????????.tif') do
(
set /A BB=1000000+%%m
rename C:\89\%%m.%%n C:\89\%BB%.%%n
)

Mais:

1/ Je ne suis pas sure de ma variable BB
2/ De mon passge de paramètre vers C:\89\%BB%.%%n

Je pense que là j'ai besoin d'un coup de pouce (ou de pied je vous
laisse le choix ...)

Merci

7 réponses

1 2
Avatar
---DGI972---
Gilles LAURENT [MVP] a écrit :
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de
news:
[...]
Il faut je trie les images tif selon leur numéros dans des répertoires
du genre:
1020001.tif dans le répertoire
c:89images102 pour les images de 1020000.tif a 1020099.tif
c:89images1021 pour les images de 1020100.tif a 1020199.tif
c:89images1022 pour les images de 1020200.tif a 1020299.tif
etc..
jusqu'a:
c:89images12099 pour les images de 1209900.tif a 1209999.tif



Le code VBScript ci-dessous devrait répondre à votre besoin. Les
dossiers de destination pour chaque lot d'image sont automatiquement
créés s'ils n'existent pas. Le bloc séparé par une ligne vide met en
évidence les adaptations réalisées :

--- Couper ici : CodeSnippet.vbs ---
Set oRe=New RegExp: oRe.IgnoreCase=True
oRe.Pattern="^(d{9}).tif$"
Set oFs=CreateObject("Scripting.FileSystemObject")
Set oSh=CreateObject("WScript.Shell")
Set oFolder=oFs.GetFolder("C:89")
For Each oFile In oFolder.Files
If oRe.Test(oFile.Name) Then
sFileName=oRe.Execute(oFile.Name)(0).SubMatches(0)+1000000

sFolder=oFile.ParentFolder & "" & _
"Images" & Left(sFileName,3) & "" & _
Mid(sFileName,4,1) & "" & Mid(sFileName,5,1) & ""
oSh.Run "%COMSPEC% /c md " & sFolder, 0, True
oFile.Move sFolder

oFile.Name=sFileName & ".tif"
End If
Next
--- Couper ici : CodeSnippet.vbs ---



super super super
je digère tout cela
merci
Avatar
---DGI972---
---DGI972--- a formulé ce lundi :
Gilles LAURENT [MVP] a écrit :
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de
news:
[...]
Il faut je trie les images tif selon leur numéros dans des répertoires
du genre:
1020001.tif dans le répertoire
c:89images102 pour les images de 1020000.tif a 1020099.tif
c:89images1021 pour les images de 1020100.tif a 1020199.tif
c:89images1022 pour les images de 1020200.tif a 1020299.tif
etc..
jusqu'a:
c:89images12099 pour les images de 1209900.tif a 1209999.tif



Le code VBScript ci-dessous devrait répondre à votre besoin. Les dossiers
de destination pour chaque lot d'image sont automatiquement créés s'ils
n'existent pas. Le bloc séparé par une ligne vide met en évidence les
adaptations réalisées :

--- Couper ici : CodeSnippet.vbs ---
Set oRe=New RegExp: oRe.IgnoreCase=True
oRe.Pattern="^(d{9}).tif$"
Set oFs=CreateObject("Scripting.FileSystemObject")
Set oSh=CreateObject("WScript.Shell")
Set oFolder=oFs.GetFolder("C:89")
For Each oFile In oFolder.Files
If oRe.Test(oFile.Name) Then
sFileName=oRe.Execute(oFile.Name)(0).SubMatches(0)+1000000

sFolder=oFile.ParentFolder & "" & _
"Images" & Left(sFileName,3) & "" & _
Mid(sFileName,4,1) & "" & Mid(sFileName,5,1) & ""
oSh.Run "%COMSPEC% /c md " & sFolder, 0, True
oFile.Move sFolder

oFile.Name=sFileName & ".tif"
End If
Next
--- Couper ici : CodeSnippet.vbs ---



super super super
je digère tout cela
merci



Au secours !

Il me manque une ligne de commande pour renommer les fichiers
1020001aaa.tif en 1020000F.tif

for /f "tokens=*" %%j in ('dir /b C:89???????aaa.tif') do (
set FRONT=%%j:~0,7F.tif%%
ren "C:89%%j" FRONT
Avatar
MCI \(ex do ré Mi chel la si do\) [MVP]
> ren "C:89%%j" "%FRONT%"



Ne pas oublier les deux " et les deux % encadrant FRONT




MCI
Avatar
---DGI972---
MCI (ex do ré Mi chel la si do) [MVP] avait écrit le 24/12/2008 :
ren "C:89%%j" "%FRONT%"



Ne pas oublier les deux " et les deux % encadrant FRONT




MCI


Merci michel mais cela ne fonctionne pas comme je veux:
voila le résultat de la fenêtre de ligne de commande:
La variable FRONT ne marche pas et le ligne ren non plus ...

c:Programme>(
set FRONT20676aaa.tif:~0,7F.tif%
ren "C:891020676aaa.tif" ""

merci d'avance
Avatar
---DGI972---
Gilles LAURENT [MVP] a formulé la demande :
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de
news:
C'est beau et ca marche ...



Merci ;-)

Pour l'octal: mais c'est bien sur ...
C'est du grand n'importe quoi ! Sur quelle base on compte en octal en
ligne de commande ?



It's by design !

Ci-dessous la version batch de votre précédente demande :

--- Couper ici : CodeSnippet.cmd ---
@echo off
setlocal enabledelayedexpansion
set root=C:89
for /f "delims=." %%i in ('dir/b %root%?????????.tif') do (
set/a filename=1%%i-999000000
set folder=images!filename:~0,3!!filename:~3,1!!filename:~4,1!
md %root%!folder! > nul 2>&1
move %root%%%i.tif %root%!folder!!filename!.tif
)
endlocal
--- Couper ici : CodeSnippet.cmd ---



C'est quoi la différence entre %i et %%i ?
A quoi ca sert le Setlocal enabledelayedexpansion et son end local ?
Pourquoi la variable filename est encdrée par des ! et non des % ?
et pourquoi le terre est ronde et qu'il a autant d'injustice ? Bo
j'arrête de poser trop de questions

Merci encore je suis en train de mettre bout à bout et cela prends
forme sérieusement ...
Avatar
Méta-MCI \(MVP\)
Bonjour !

C'est quoi la différence entre %i et %%i ?



Dans un FOR, il faut utiliser %%i si c'est un batch, et %i si c'est une
commande (en interactif, par exemple).


A quoi ca sert le Setlocal enabledelayedexpansion et son end local ?



Les %VAR% sont remplacés par la valeur correspondante, au moment de la
lecture de la ligne, et non au moment de son exécution. Comme ce qui est
après un DO fait partie de la même ligne logique que le FOR (même s'il y
a des parenthèses et que ça déborde sur les lignes suivantes), une
affectation (set VAR=...) aura lieu au moment de l'exécution, et non au
moment de la lecture de la ligne. La valeur ne sera pas remplacée comme
attendu.
L' "expansion retardée" permet d'utiliser ! à la place de %, pour
effectuer un remplacement au moment de l'exécution. Voir SET /? pour
plus (hum...) de détails.


Pourquoi la variable filename est encadrée par des ! et non des % ?



Cf le paragraphe ci-dessus.


et pourquoi le terre est ronde et qu'il a autant d'injustice ? Bo



D'abord, la Terre n'est pas vraiment ronde. Plutôt "comme une pomme
vaguement écrasée".
Ensuite, les pommes servant essentiellement à fabriquer du Calva, cela
explique les injustices.


@+, et Joyeux Noël.
--
MCI
Avatar
---DGI972---
Méta-MCI (MVP) a écrit :
Joyeux Noël



Merci

et Joyeux Noël à vous
et à tous sur ce NewsGroup que j'adore ...
1 2