Question
Renommer fichier avec incrément si déjà existant
- Eric_K
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 9
- Remerciements reçus 0
il y a 16 ans 5 mois #5393
par Eric_K
Renommer fichier avec incrément si déjà existant a été créé par Eric_K
Bonjour à tous,
Je souhaiterais renommer un fichier c:\test\toto.txt en c:\test\titi01.txt.
Mais si c:\test\titi01.txt existe déjà, renommer c:\test\toto.txt en c:\test\titi02.txt, mais si c:\test\titi02.txt existe déjà renommer c:\test\toto.txt en c:\test\titi03.txt. Etc.... jusqu'à c:\test\titi40.txt.
J'ai trouvé sur internet ce code:
[code:1]
function CopyFileToFolder ([string]$Source,[string]$destination){
# get filename
$filename = $source.substring($source.lastindexofany(\"\\"«») +1 ,$source.length - ($source.lastindexofany(\"\\"«»)+1))
# verify if file exists
if (Test-Path $destination$file) {
$ext = Get-Date -format 'yyMMddhhmmss'
Rename-Item $destination$filename $ext\".\"$filename
}
Copy-Item $source $destination
}
$sourcefilepath = \"P:\powershell Script\Orginal\test.txt\"
$destinationpath = \"P:\powershell Script\destinationDir\\"
copyFiletoFolder $sourcefilepath $destinationpath
[/code:1]
Mais je n'arrive pas à l'adapter pour qu'il incrémente le nom de fichier d'un au lieu de mettre la date.
Merci à vous pour votre aide.<br><br>Message édité par: Eric_K, à: 2/10/09 10:20
Je souhaiterais renommer un fichier c:\test\toto.txt en c:\test\titi01.txt.
Mais si c:\test\titi01.txt existe déjà, renommer c:\test\toto.txt en c:\test\titi02.txt, mais si c:\test\titi02.txt existe déjà renommer c:\test\toto.txt en c:\test\titi03.txt. Etc.... jusqu'à c:\test\titi40.txt.
J'ai trouvé sur internet ce code:
[code:1]
function CopyFileToFolder ([string]$Source,[string]$destination){
# get filename
$filename = $source.substring($source.lastindexofany(\"\\"«») +1 ,$source.length - ($source.lastindexofany(\"\\"«»)+1))
# verify if file exists
if (Test-Path $destination$file) {
$ext = Get-Date -format 'yyMMddhhmmss'
Rename-Item $destination$filename $ext\".\"$filename
}
Copy-Item $source $destination
}
$sourcefilepath = \"P:\powershell Script\Orginal\test.txt\"
$destinationpath = \"P:\powershell Script\destinationDir\\"
copyFiletoFolder $sourcefilepath $destinationpath
[/code:1]
Mais je n'arrive pas à l'adapter pour qu'il incrémente le nom de fichier d'un au lieu de mettre la date.
Merci à vous pour votre aide.<br><br>Message édité par: Eric_K, à: 2/10/09 10:20
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 16 ans 5 mois #5396
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Renommer fichier avec incrément si déjà existant
Eric_K écrit:
Par exemple celle-ci :
[code:1]
Function New-FileName([string] $FullFileName)
{
$I=1
$Name=[System.IO.Path]::GetFilenameWithoutExtension( $FullFileName)
$Path=[System.IO.Path]::GetDirectoryName( $FullFileName)
while ($true)
{
$NewName=\"$Name{0:d2}.txt\" -F $I
if (! (Test-Path \"$Path\$NewName\"«»))
{
$NewName
break
}
$I++
}
}
New-FileName \"C:\temp\test.txt\"
dir test*.txt
[/code:1]
La fonction renvoi un nouveau nom de fichier sans le path.
Il n'y pas de borne pour $I.
S'il y a des trous dans la numérotation, on prend le premier nom fichier inexistant.
Si tu as un historique de 300 fichiers, il y aura 300 accés.
Une autre approche serait de rechercher dans la liste des fichiers existant, qq chose comme :
[code:1]
Dir \"test[0-9][0-9].txt\"|Sort Name|Select -last 1 [/code:1]
Ensuite construire le nouveau nom.
Faut tester les perf des 2 approches, enfin cela dépend aussi du contexte et de la fréquence.
C'est normal, il faut repartir avec une autre approche.Mais je n'arrive pas à l'adapter pour qu'il incrémente le nom de fichier d'un au lieu de mettre la date.
Par exemple celle-ci :
[code:1]
Function New-FileName([string] $FullFileName)
{
$I=1
$Name=[System.IO.Path]::GetFilenameWithoutExtension( $FullFileName)
$Path=[System.IO.Path]::GetDirectoryName( $FullFileName)
while ($true)
{
$NewName=\"$Name{0:d2}.txt\" -F $I
if (! (Test-Path \"$Path\$NewName\"«»))
{
$NewName
break
}
$I++
}
}
New-FileName \"C:\temp\test.txt\"
dir test*.txt
[/code:1]
La fonction renvoi un nouveau nom de fichier sans le path.
Il n'y pas de borne pour $I.
S'il y a des trous dans la numérotation, on prend le premier nom fichier inexistant.
Si tu as un historique de 300 fichiers, il y aura 300 accés.
Une autre approche serait de rechercher dans la liste des fichiers existant, qq chose comme :
[code:1]
Dir \"test[0-9][0-9].txt\"|Sort Name|Select -last 1 [/code:1]
Ensuite construire le nouveau nom.
Faut tester les perf des 2 approches, enfin cela dépend aussi du contexte et de la fréquence.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.040 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Renommer fichier avec incrément si déjà existant