Question Renommer fichier avec incrément si déjà existant

Plus d'informations
il y a 16 ans 5 mois #5393 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

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 5 mois #5396 par Laurent Dardenne
Eric_K écrit:

Mais je n'arrive pas à l'adapter pour qu'il incrémente le nom de fichier d'un au lieu de mettre la date.

C'est normal, il faut repartir avec une autre approche.
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=\&quot;$Name{0:d2}.txt\&quot; -F $I
if (! (Test-Path \&quot;$Path\$NewName\&quot;«»))
{
$NewName
break
}
$I++
}
}

New-FileName \&quot;C:\temp\test.txt\&quot;
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 \&quot;test[0-9][0-9].txt\&quot;|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
Propulsé par Kunena