Question besoin d'aide pour un script

Plus d'informations
il y a 4 ans 4 mois #29390 par Memroa
Bonjour,

je sollicite l'aide de la communauté sur un problème que je cherche a résoudre.
j'ai un dossier disposant de plusieurs fichier au format doc
exemple:
ref_2145 DUPONT_Helene 264.doc
ref_5613 LAGOYE_Pierre 254.doc
ref_8665 BUISSAS_Sophie 641.docx

Je cherche a partir de nom du fichier a extraire \"DUPONT_Helene\" pour créé un dossier avec cette valeur puis déplacer le fichier dans ce dossier.

J'ai commencer par liste le contenue du répertoire ou se trouveront les fichiers au format \"doc\"

$cheminDossier = \"C:\Users\MemoraPepitoetLoulou\Desktop\Dev-Script\Test\"
$Files = Get-ChildItem $cheminDossier

foreach($nomFichier in $Files) {
Write-Host $nomFichier
}

J'ai ensuite chercher a partir d'une recherche regex de chercher la valeur qui commence en majuscule suivi \"_\" pour finir par des lettres en majuscule ou minuscule.

$newNomFichier = ( $nomFichier. -match '[A-Z]_[a-zA-Z]')

Je pensai l'inséré

$cheminDossier = \"C:\Users\MemoraPepitoetLoulou\Desktop\Dev-Script\Test\"
$Files = Get-ChildItem $cheminDossier

foreach($nomFichier in $Files) {

$newNomFichier = ( $nomFichier. -match '[A-Z]_[a-zA-Z]')

Write-Host $ newNomFichier
}

Le résultat n'était fructueux.

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

Plus d'informations
il y a 4 ans 4 mois #29393 par Laurent Dardenne
Salut,
essaie en utilisant ceci
[code:1]
$s='ref_2145 DUPONT_Helene 264.doc'
$SplittedName=@{
TypeName='UserDoc'
Regex='^ref_(?<Ref>.*?) (?<Nom>.*?)_(?<Prenom>.*?) (?<Number>.*?)\.(?<Extension>.*?)$'
Keys=0
}
New-MatchesObject $s @SplittedName

# Ref : 2145
# Nom : DUPONT
# Number : 264
# Prenom : Helene
# Extension : doc
[/code:1]

Tutoriels PowerShell

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

Plus d'informations
il y a 4 ans 4 mois #29396 par Memroa
Réponse de Memroa sur le sujet Re:besoin d'aide pour un script
Merci Laurent,

On comparant ce que j'ai commencer a faire, par rapport au tiens....j’étais loin du compte :unsure:

J'ai quelque question a te poser.
Ta fonction \"New-MatchesObject\" renvoie :

# Ref : 2145
# Nom : DUPONT
# Number : 264
# Prenom : Helene
# Extension : doc

J'ai tenter de récupéré \"Nom\" et \"Prenom\" en utilisant

Write -Host \"Nom du dossier de l'utilisateur :\" $Nom \" \" $Prenom

Mais j'ai bien ma chaine de caractère sauf la valeur des 2 variables.

Les 2 valeurs \"Nom\" et \"Prenom\" que je compte utiliser dans

$dossierUser = $Nom $Prenom

# On test si le dossier de la personne est déjà présent
If (-not (Test-Path $cheminDossier\"\\"$dossierUser)) {

# Le dossier de la personne n'existe pas, alors on crée le dossier
New-Item -ItemType Directory -Name $cheminDossier\"\\"$dossierUser

# On deplace le fichier dans le dossier
Move-Item -Path $nomFichier -Destination $cheminDossier\"\\"$dossierUser

}else{

# Le dossier de la personne existe
# Copie le fichier dans le dossier
Move-Item -Path $nomFichier -Destination $cheminDossier\"\\"$nom $Prenom
}

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

Plus d'informations
il y a 4 ans 4 mois #29397 par Memroa
Réponse de Memroa sur le sujet Re:besoin d'aide pour un script
Merci Laurent,

On comparant ce que j'ai commencer a faire, par rapport au tiens....j’étais loin du compte :unsure:

J'ai quelque question a te poser.
Ta fonction \"New-MatchesObject\" renvoie :

# Ref : 2145
# Nom : DUPONT
# Number : 264
# Prenom : Helene
# Extension : doc

J'ai tenter de récupéré \"Nom\" et \"Prenom\" en utilisant

Write -Host \"Nom du dossier de l'utilisateur :\" $Nom \" \" $Prenom

Mais j'ai bien ma chaine de caractère sauf la valeur des 2 variables.

Les 2 valeurs \"Nom\" et \"Prenom\" que je compte utiliser dans

$dossierUser = $Nom $Prenom

# On test si le dossier de la personne est déjà présent
If (-not (Test-Path $cheminDossier\"\\"$dossierUser)) {

# Le dossier de la personne n'existe pas, alors on crée le dossier
New-Item -ItemType Directory -Name $cheminDossier\"\\"$dossierUser

# On deplace le fichier dans le dossier
Move-Item -Path $nomFichier -Destination $cheminDossier\"\\"$dossierUser

}else{

# Le dossier de la personne existe
# Copie le fichier dans le dossier
Move-Item -Path $nomFichier -Destination $cheminDossier\"\\"$nom $Prenom
}

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

Plus d'informations
il y a 4 ans 4 mois #29402 par Laurent Dardenne
Memora écrit:

J'ai tenter de récupéré \"Nom\" et \"Prenom\" en utilisant

Un début de réponse :
[code:1]
$objet=New-MatchesObject $s @SplittedName
$objet|Get-Member
[/code:1]
Ainsi tu peux construire ton nom de chemin aisément.
Avec New-MatchesObject on peut ajouter à l'objet une propriété contenant $null (une capture qui n'existe pas), mais pas de propriété calculée, sauf en utilisant Add-Member:
[code:1]
$objet=New-MatchesObject $s @SplittedName |
Add-Member -membertype ScriptProperty -name Path -value{ code de construction du chemin}
#on aussi envisager une fonction Split-mesDonnées encapsulant le tout, puis la paramétrer...
#la v2 peut être :«»-)
[/code:1]
Syntaxe à vérifier.

Tutoriels PowerShell

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

Plus d'informations
il y a 4 ans 4 mois #29403 par Memroa
Réponse de Memroa sur le sujet Re:besoin d'aide pour un script
Bonjour Laurent,

Merci encore pour ton aide, ce soir j'ai réussi a crée a partir du \"Nom Prénom\" le dossier de l'utilisateur en copiant le fichier le concernant

Je suis actuellement confronter a un dernier souci. Lorsque j’exécute une 1er fois le script, il me crée bien le dossier de chaque personne respectif et déplace le fichier le concernant dans le bon dossier.

Si je relance une n fois le script, il déplace des dossiers existant dans le dossier le 1er dossier.
Exemple:
3 fichiers:
ref_2145 DUPONT_Helene 264.doc
ref_5613 DUPOND_Pierre 254.doc
ref_8665 BUIRAR_Sophie 641.docx

Lancement 01 du script:
Création des dossier avec déplacement des fichiers respectif dans les dossiers des personnes
DUPONT Helene
DUPOND Pierre
BUIRAR Sophie

Lancement 02 du script:
Normalement il ne devrait pas créé de dossier du fait qu'ils sont présents. Pour le 1er dossier c'est bon...par contre il me déplace les 2 autres dossier dans le 1er
BUIRAR Sophie
|-DUPOND Pierre
|- DUPONT Helene


$cheminDossier = \"C:\Users\MemoraPepitoetLoulou\Desktop\Dev-Script\Test\"
Set-Location -Path $cheminDossier

$Files = Get-ChildItem $cheminDossier

foreach($nomFichier in $Files) {

$s=$nomFichier
$SplittedName=@{
TypeName='UserDoc'
Regex='^ref_(?<Ref>.*?) (?<Nom>.*?)_(?<Prenom>.*?) (?<Number>.*?)\.(?<Extension>.*?)$'
Keys=0
}
$objet = New-MatchesObject $s @SplittedName
$objet | Get-Member
$dossierUser = $objet[0].Nom+' '+$objet[0].Prenom

# Ref : 2145
# Nom : DUPONT
# Number : 264
# Prenom : Helene
# Extension : doc

# On test si le dossier de la personne est déjà présent
If (-not (Test-Path $dossierUser)) {

# Le dossier de la personne n'existe pas, alors on créé le dossier
New-Item -ItemType Directory -Name $dossierUser

# On deplace le fichier dans le dossier
Move-Item -Path $nomFichier -Destination $dossierUser

}else{

# Le dossier de la personne existe
# Copie le fichier dans le dossier
Move-Item -Path $nomFichier -Destination $dossierUser

}

}

Est ce que je me suis planter on utilisant \"if\"

Encore merci pour ton aide.

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

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