Question [Fonction] Décomposer un nom de fichier

Plus d'informations
il y a 11 ans 1 mois #12972 par Laurent Dardenne
Voici une fonction décomposant un nom de fichier en plusieurs parties :
[code:1]
function Get-SplitedPath {
# Construit un objet contenant les parties d'un nom de fichier
param ($FileName)

$PathRoot=[System.IO.Path]::GetPathRoot($FileName);
$Directory=[System.IO.Path]::GetDirectoryName($FileName);
$Fn=[System.IO.Path]::GetFileName($FileName)
$Extension=[System.IO.Path]::GetExtension($Fn);
$FNnoExtension=[System.IO.Path]::GetFileNameWithoutExtension($Fn)

$object=new-object PSobject -Property @{
PathRoot=$PathRoot
Directory=$Directory;
Drive=$PathRoot[0];
FileName=$Fn;
Extension=$Extension;
FileNameWithoutExtension=$FNnoExtension
}
$object.PsObject.TypeNames.Insert(0,\"SliptedPath\"«»)
$object
}# Get-SplitedPath

function New-FileNameTimeStamped{
param($FileName,$Date=(Get-Date),$Format='dd-MM-yyyy-HH-mm-ss')

$SP=Get-SplitedPath $FileName
\"{0}\{1}-{2:$Format}{3}\" -F $SP.Directory,$SP.FileNameWithoutExtension,$Date,$SP.Extension
}#New-FileNameTimeStamped
[/code:1]
Un exemple :
[code:1]
Get-SplitedPath 'C:\Temp\Traitement.log'
# Drive : C
# Directory : C:\Temp
# Extension : .log
# FileName : Traitement.log
# PathRoot : C:\
# FileNameWithoutExtension : Traitement

New-FileNameTimeStamped 'C:\Temp\Traitement.log'
# C:\Temp\Traitement-24-10-2012-15-02-25.log
[/code:1]

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 1 mois #12973 par SiSMik
Salut,
ça va être utile bien à bien des personnes.

Merci

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

Plus d'informations
il y a 11 ans 1 mois #12977 par Richard Lazaro
Hello,

Pour la première fonction, je trouve qu'elle fait appelle à beaucoup de chose peut être pour rien ?

Toutes les infos (hormis le Drive et PathRoot) sont retournées via la cmdlet Get-Item.

Bien Cordialement,
Richard Lazaro.

Think-MS : (Get-Life).Days | %{ Learn-More }

\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein

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

Plus d'informations
il y a 11 ans 1 mois #12978 par Laurent Dardenne
Salut Richard
Richard Lazaro écrit:

Toutes les infos (hormis le Drive et PathRoot) sont retournées via la cmdlet Get-Item.

Pour Get-item tu as raison, son seul pb est que le fichier doit exister, car il s'adresse au provider FS.

Par exemple si je veux créer un fichier de log et lui associer un timestamp, Get-item ne fonctionne pas et Split-Path demande plusieurs appels, à moins de créer un proxy.

Tout compte fait, je n'aurais pas dû me focaliser sur le mot Path, mais File :) :
[code:1]
$F=New-object System.IO.FileInfo 'C:\Temp\Traitement.log'
[/code:1]
Un effet de bord de l'usage de la convention Verbe-Nom...
Richard Lazaro écrit:

Pour la première fonction, je trouve qu'elle fait appelle à beaucoup de chose peut être pour rien ?

En utilisant la seconde approche, je dirais oui :ohmy:

[edit]
Coquille
[/edit]<br><br>Message édité par: Laurent Dardenne, à: 27/10/12 13:30

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 1 mois #12979 par Laurent Dardenne
Du coup un petit peu de refactoring, on supprime la première fonction et on modifie la seconde :
[code:1]
function New-FileNameTimeStamped{
param($FileName,$Date=(Get-Date),$Format='dd-MM-yyyy-HH-mm-ss')

$SF=New-object System.IO.FileInfo $FileName
\&quot;{0}\{1}-{2:$Format}{3}\&quot; -F $SF.Directory,$SF.BaseName,$Date,$SF.Extension
}#New-FileNameTimeStamped
[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 27/10/12 13:31

Tutoriels PowerShell

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

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