Question Renommer lot de fichier

Plus d'informations
il y a 13 ans 1 mois #14097 par yahway
Renommer lot de fichier a été créé par yahway
Bonjour à tous,

j'ai un lot de fichier formaté de la maniere suivante :

170-15934-080-D-a3.tiff

je souhaite renommer chaque fichier present dans un dossier \"SRC\" en recuperant certaines parti de leur nom d'origine.

par exemple :


170-15934-080-D-a3.tiff doit etre renommé : \"170-15934-080@170-15934-080@D\"

j'ai ecrit le code suivant :



## Dossier SRC et DST
$srcAUTO = \"E:\Scripts\Powershell\RenameFiles\SRC\"
$destinationAUTO = \"E:\Scripts\Powershell\RenameFiles\DST\"

#### compte nbr de fichiers

$countAUTO = (Get-ChildItem $srcAUTO).Count
#Write-host $countAUTO

if ($countAUTO -gt \"0\")
{

$itemsBUAUTO = Get-ChildItem -Path $srcAUTO -name | Out-String
Write-Host $itemsBUAUTO
Foreach ($itemBUAUTO in $itemsBUAUTO)
{
$part1 = $itemBUAUTO.SubString(0,13)
$part2 = $itemBUAUTO.SubString(14,1)
$newFileName = 'XPL_' + $part1 + '@' + $part1 + '@' + $part2 +'_GALION'
Rename-Item $itemBUAUTO $newFileName
$part1
$part2
$newFileName

}
}

ce code me permet de recuperer dans $part1 les 13 premier caractere de la chaine. et part2 le 14eme caractere.

je crée bien le nouveau nom de fichier souhaité dans la variable '$newfileName', mais
je n'arrive pas à l'utiliser pour renommer tous les fichiers present dans le dossier SRC.

merci de votre aide.<br><br>Message édité par: yahway, à: 26/02/13 16:19

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

Plus d'informations
il y a 13 ans 1 mois #14099 par xyz
Réponse de xyz sur le sujet Re:Renommer lot de fichier
Utilise la substitution, chaîne avec des doubles quotes :
[code:1]
$Name='170-15934-080-D-a3.tiff'
\&quot;test\&quot; &gt;\&quot;c:\temp\$Name\&quot;

# doit etre renommé : \&quot;170-15934-080@170-15934-080@D\&quot;

$file=get-Childitem \&quot;c:\temp\$Name\&quot;
$part1 = $File.Name.SubString(0,13)
$part2 = $File.Name.SubString(14,1)
$newFileName = \&quot;XPL_$part1@$part1@$part2\&quot;
del $newFileName -ea silentlycontinue
Rename-Item $File $newFileName -whatif
[/code:1]

Tutoriels PowerShell

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

Plus d'informations
il y a 13 ans 1 mois #14121 par yahway
Réponse de yahway sur le sujet Re:Renommer lot de fichier
bonjour,

merci pour ta reponse, J'ai avancé de mon coté et j'arrive a obtenir ce que je veux avec le code suivant :

## Dossier SRC et DST
$srcAUTO = \&quot;E:\Scripts\Powershell\RenameFiles\SRC\&quot;
$destinationAUTO = \&quot;E:\Scripts\Powershell\RenameFiles\DST\&quot;
$logPath = \&quot;E:\Scripts\Powershell\RenameFiles\log.txt\&quot;
clear

$itemsBUAUTO = Get-childitem $srcAUTO | ?{!($_.PSIsContainer)}
# verify if the list of source files is empty
if ($itemsBUAUTO -ne $null) {
foreach ($file in $itemsBUAUTO) {
Remove-variable -Name part1
Remove-variable -Name part2
$part1 = $FileBase.SubString(0,13)
$part2 = $FileBase.SubString(14,1)
$FileFull = $file.Name
$FileBase = $file.BaseName
$FileExt = $file.Extension

$FileFull
$part1
$part2

# Rename the File
$FileNameRN = 'XPL_' + $part1 + '@' + $part1 + '@' + $part2 +'_GALION' + $FileExt
$FileNameRN
Rename-Item -path $file.FullName -newname $FileNameRN -erroraction silentlycontinue


Le problème est qu'a chaque exécution, j’obtiens un décalage dans le renommage des fichiers. j'ai l'impression que les variable part1 et part2 gardent les valeurs du fichier exécuté dans la boucle précédente. ce qui engendre un renommage des fichiers completement erroné.

Par exemple pour 2 fichiers présent dans le dossier SRC j'obtiens :

$filefull = 042-10447-000-B-a4.tif
$part1 = 042-10443-000 -&gt; valeur provenant d'un traitement anterieur
$part2 = B --&gt; valeur provenant d'un traitement anterieur
$FileNameRN = XPL_042-10443-000@042-10443-000@B_GALION.tif
$filefull = 042-10448-001-D-a2.tif
$part1 = 042-10447-000 -&gt; valeur provenant du 1er fichier
$part2 = B --&gt; valeur provenant d'un traitement anterieur
$FileNameRN = XPL_042-10447-000@042-10447-000@B_GALION.tif

Merci de votre aide

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

Plus d'informations
il y a 13 ans 1 mois #14126 par yahway
Réponse de yahway sur le sujet Re:Renommer lot de fichier
j'ai reglé mon souci. Voici le code complet qui me permet de renommer les fichiers et de la deplacer aevc en plus une ecriture du resultat dans un fichiers de log .

## Dossier SRC et DST + LOG
$srcAUTO = \&quot;E:\Scripts\Powershell\RenameFiles\SRC\&quot;
$destinationAUTO = \&quot;E:\Scripts\Powershell\RenameFiles\DST\&quot;
$logPath = \&quot;E:\Scripts\Powershell\RenameFiles\log.txt\&quot;

## Initialisation des variables
$count = 0
$part1 = ''
$part2 = ''
$itemsBUAUTO = ''
$FileFull = ''
$FileBase = ''
$FileExt = ''
$file = ''
clear

## Recuperation des fichiers
$itemsBUAUTO = Get-childitem $srcAUTO | ?{!($_.PSIsContainer)}

## Test si liste des fichiers n'est pas vide
if ($itemsBUAUTO -ne $null) {
foreach ($file in $itemsBUAUTO) {

$FileFull = $file.Name
$FileBase = $file.BaseName
$FileExt = $file.Extension

## Decoupage de la chaine
$part1 = $FileBase.SubString(0,13)
$part2 = $FileBase.SubString(14,1)

## Affichage des variables

$FileFull
$part1
$part2

# Renomage du fichiers

$FileNameRN = 'XPL_' + $part1 + '@' + $part1 + '@' + $part2 +'_GALION' + $FileExt
$FileNameRN
Rename-Item -path $file.FullName -newname $FileNameRN -erroraction silentlycontinue

if ($ActionErr){\&quot;Error renaming $file\&quot; | Out-File $LogPath }
else
{write-output (\&quot;File $file was successfully renamed to $FileNameRN\&quot;) | Out-File $LogPath }
$movefrom=join-path $srcAUTO $FileNameRN
Move-Item $movefrom -destination $DestinationAUTO
if ($ActionErr){\&quot;Error moving $FileNameRN\&quot; | Out-File $LogPath }
else
{write-output (\&quot;File $FileNameRN was successfully moved to $DestinationAUTO\&quot;) | Out-File $LogPath }
}
}
else
{
write-output (\&quot;No Files to move - PROCESS CLEARED\&quot;) | Out-File $LogPath -Append
}

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

Plus d'informations
il y a 13 ans 1 mois #14130 par yahway
Réponse de yahway sur le sujet Re:Renommer lot de fichier
Version finale avec gestion des logs par date :

#Initialisation de la date
$date = Get-Date -Format 'ddMMyyyy_HHmmss'

## Dossier SRC et DST + LOG BUAUTO
$srcAUTO = \&quot;E:\Plansdif\+ Diffusion Viséo Auto\&quot;
$destinationAUTO = \&quot;Z:\BUAUTO\&quot;
$logPathAuto = \&quot;C:\Scripts\logs_auto\log_$date.txt\&quot;


## Initialisation des variables BUAUTO

$part1auto = ''
$part2auto = ''
$itemsBUAUTO = ''
$FileFullauto = ''
$FileBaseauto = ''
$FileExtauto = ''
$fileauto = ''
clear




## TRAITEMENT BUAUTO

## Recuperation des fichiers
$itemsBUAUTO = Get-childitem $srcAUTO | ?{!($_.PSIsContainer)}

## Test si liste des fichiers n'est pas vide
if ($itemsBUAUTO -ne $null) {
foreach ($fileauto in $itemsBUAUTO) {

$FileFullauto = $fileauto.Name
$FileBaseauto = $fileauto.BaseName
$FileExtauto = $fileauto.Extension

## Decoupage de la chaine
$part1auto = $FileBaseauto.SubString(0,13)
$part2auto = $FileBaseauto.SubString(14,1)

## Affichage des variables

$FileFullauto
$part1auto
$part2auto

# Renomage des fichiers

$FileNameRNauto = 'XPL_' + $part1auto + '@' + $part1auto + '@' + $part2auto +'_GALION' + $FileExtauto
$FileNameRNauto
Rename-Item -path $fileauto.FullName -newname $FileNameRNauto -erroraction silentlycontinue

if ($ActionErr){\&quot;Error renaming $file\&quot; | Out-File $LogPathAuto -Append }
else
{write-output ( \&quot;$date - File $fileauto was successfully renamed to $FileNameRNauto\&quot;) | Out-File $LogPathAuto -Append}
$movefromauto=join-path $srcAUTO $FileNameRNauto
Move-Item $movefromauto -destination $DestinationAUTO
if ($ActionErr){ \&quot;$date - Error moving $FileNameRNauto\&quot; | Out-File $LogPathAuto -Append}
else
{write-output (\&quot;$date - File $FileNameRNauto was successfully moved to $DestinationAUTO\&quot;) | Out-File $LogPathAuto -Append }
}
}
else
{
write-output (\&quot;$date - No Files to move - PROCESS CLEARED\&quot;) | Out-File $LogPathAuto -Append
}<br><br>Message édité par: yahway, à: 27/02/13 13:40

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

Temps de génération de la page : 0.050 secondes
Propulsé par Kunena