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

10 réponses

1 2
Avatar
MCI \(ex do ré Mi chel la si do\) [MVP]
Bonjour !

Il y a deux pièges...

D'abord, après un DO (entre tes parenthèses), on ne peut pas tout faire.
Il est préférable de passer par un sous-programme (voir exemple
ci-dessous).

Ensuite, avec SET /A, un nombre qui commence par 0 (le caractère "0" -
zéro), est considéré comme étant en octal, et convertit en décimal pour
le calcul. Si cela ne te gêne pas, l'exemple ci-dessous te conviendra.
Sinon, il faudra passer par %VAR:~-n%



@echo off
setlocal
For /f "tokens=1-2 delims=." %%m in ('dir /b C:89??????????.tif') do
CALL :SUB %%m %%n
endlocal
goto :EOF

:SUB
echo rename C:89%1.%2 C:89%BB%.%2
goto :EOF




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


Aaaaaaarrrrrrggggghhhhhh !!!!!

Comme d'habitude, le mode texte-brut coupe intempestivement les lignes.
Le CALL :SUB..... doit suivre le DO (sur la même ligne)

@+
--
Michel Claveau



@echo off
setlocal
For /f "tokens=1-2 delims=." %%m in ('dir /b C:89??????????.tif')
do CALL :SUB %%m %%n
endlocal
goto :EOF

:SUB
echo rename C:89%1.%2 C:89%BB%.%2
goto :EOF
Avatar
Méta-MCI \(MVP\)
Re-re !

Décidément, ce n'est pas le jour...
J'ai, en plus, oublié une ligne, dans mon copié/collé...
Voilà donc la bonne version (j'espère) :

@echo off
setlocal
For /f "tokens=1-2 delims=." %%m in ('dir /b
C:89??????????.tif') do CALL :SUB %%m %%n
endlocal
goto :EOF

:SUB
set /A BB00000+%1
echo rename C:89%1.%2 C:89%BB%.%2
goto :EOF


@+
--
MCI
Avatar
Gilles LAURENT [MVP]
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de
news:
| Bonsoir a tous,

Bonjour,

| 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
[...]

En complément des réponses précédentes, ci-dessous un script VBScript
permettant de répondre à votre besoin. Celui-ci filtre à l'aide d'une
expression régulière les fichiers avec l'extension .tif selon le format
spécifié puis procède au renomage.

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

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
---DGI972---
Méta-MCI (MVP) a présenté l'énoncé suivant :
Re-re !

Décidément, ce n'est pas le jour...
J'ai, en plus, oublié une ligne, dans mon copié/collé...
Voilà donc la bonne version (j'espère) :

@echo off
setlocal
For /f "tokens=1-2 delims=." %%m in ('dir /b C:89??????????.tif')
do CALL :SUB %%m %%n
endlocal
goto :EOF

:SUB
set /A BB00000+%1
echo rename C:89%1.%2 C:89%BB%.%2
goto :EOF


@+


Bonjour,
merci pour ce petit cours en privé.
J'ai essayé le code qui m'ouvre de grande perspective mais:
dans le passage de la première boucle du sous programme SUB
le résultat de 1000000+000020001 donne:
1008193.tif ????
et le renommage du fichier me donne
c:programme>rename c:8900020001.tif c:891008193.tif
la syntaxe de la commande est incorrecte
la deuxième boucle
1008194.tif
c:programme>rename c:8900020001.tif c:891008194.tif
la syntaxe de la commande est incorrecte
etc....

je ne vois pas pourquoi
Avatar
Gilles LAURENT [MVP]
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de
news:
| Bonjour,

Bonjour,

| merci pour ce petit cours en privé.
| J'ai essayé le code qui m'ouvre de grande perspective mais:
| dans le passage de la première boucle du sous programme SUB
| le résultat de 1000000+000020001 donne:
| 1008193.tif ????

Car 000020001 (octal) = 8193 (décimal)

| et le renommage du fichier me donne
| c:programme>rename c:8900020001.tif c:891008193.tif
| la syntaxe de la commande est incorrecte

Car la syntaxe est rename [path]filename newfilename

Une version alternative en batch :

--- Couper ici : CodeSnippet.cmd ---
@echo off
setlocal enabledelayedexpansion
for /f "delims=." %%i in ('dir/b C:89?????????.tif') do (
set/a filename=1%%i-999000000
ren C:89%%i.tif !filename!.tif
)
endlocal
--- Couper ici : CodeSnippet.cmd ---

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
---DGI972---
Gilles LAURENT [MVP] a écrit :
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de
news:
Bonjour,



Bonjour,

merci pour ce petit cours en privé.
J'ai essayé le code qui m'ouvre de grande perspective mais:
dans le passage de la première boucle du sous programme SUB
le résultat de 1000000+000020001 donne:
1008193.tif ????



Car 000020001 (octal) = 8193 (décimal)

et le renommage du fichier me donne
c:programme>rename c:8900020001.tif c:891008193.tif
la syntaxe de la commande est incorrecte



Car la syntaxe est rename [path]filename newfilename

Une version alternative en batch :

--- Couper ici : CodeSnippet.cmd ---
@echo off
setlocal enabledelayedexpansion
for /f "delims=." %%i in ('dir/b C:89?????????.tif') do (
set/a filename=1%%i-999000000
ren C:89%%i.tif !filename!.tif
)
endlocal
--- Couper ici : CodeSnippet.cmd ---



C'est beau et ca marche ...

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 ?
Avatar
---DGI972---
Gilles LAURENT [MVP] a écrit :
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de
news:
Bonsoir a tous,



Bonjour,

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


[...]

En complément des réponses précédentes, ci-dessous un script VBScript
permettant de répondre à votre besoin. Celui-ci filtre à l'aide d'une
expression régulière les fichiers avec l'extension .tif selon le format
spécifié puis procède au renomage.

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



Je me demande si il y a pas une caméra cachée ...

Car je vais surement avoir besoin de cette version en vbs car mon
affaire est loin d'être finie ....

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

merci merci et merci encore
Avatar
Gilles LAURENT [MVP]
"---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 ---

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
Gilles LAURENT [MVP]
"---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 ---

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
1 2