- forum
- PowerShell
- Entraide pour les initiés
- Avis sur un script qui doit corriger des noms de fichiers avec pleins replace
Résolu Avis sur un script qui doit corriger des noms de fichiers avec pleins replace
- Gabriel
- Auteur du sujet
- Hors Ligne
- Membre elite
Réduire
Plus d'informations
- Messages : 248
- Remerciements reçus 1
il y a 8 mois 4 semaines - il y a 8 mois 2 semaines #34103
par Gabriel
Avis sur un script qui doit corriger des noms de fichiers avec pleins replace a été créé par Gabriel
[edit j'ai eu une réponse satisfaisante à ma question ,mais cela a ouvert un sujet sur le mode débogage
très intéressante]
bonjour
j'aimerais avoir votre avis sur un script de renommage de photos qui corrige pleins d'erreur de type TYPO (au moment de la saisie on oublie les accents ou on est sujet à dyslexique)
pour le moment je passe le nom du fichier dans une moulinette comme celle-ci
bon ca marche mais ca veut dire une nouvelle ligne pour chaque correction, je voulais savoir si il y avait d'autres idées?
je pourrais mettre les paire de string dans un fichier les charger au lancement du script et faire un foreach, mais y a t il une meilleure approche (la liste des fichiers grandi a mesure que je scanne et que je trie)
cordialement
Gabriel
bonjour
j'aimerais avoir votre avis sur un script de renommage de photos qui corrige pleins d'erreur de type TYPO (au moment de la saisie on oublie les accents ou on est sujet à dyslexique)
pour le moment je passe le nom du fichier dans une moulinette comme celle-ci
$FichierATraiter = $FichierATraiter -replace "{|\(|\[\[","["
$FichierATraiter = $FichierATraiter -replace "}|\)|\}\}","]"
$FichierATraiter = $FichierATraiter -replace "\s\[(\d+)\]|\((\d+)\)","_`$1"
$FichierATraiter = $FichierATraiter -replace "\[(\d+)\]","_`$1"
$FichierATraiter = $FichierATraiter -replace "__","_"
$FichierATraiter = $FichierATraiter -replace "--|_-_","-"
$FichierATraiter = $FichierATraiter -replace "mar[eèêë]e","marée"
$FichierATraiter = $FichierATraiter -replace "clotihlde|clohtilde","Clothilde"
$FichierATraiter = $FichierATraiter -replace "Vintage","vintage"
$FichierATraiter = $FichierATraiter -replace "a_paris","à_paris"
bon ca marche mais ca veut dire une nouvelle ligne pour chaque correction, je voulais savoir si il y avait d'autres idées?
je pourrais mettre les paire de string dans un fichier les charger au lancement du script et faire un foreach, mais y a t il une meilleure approche (la liste des fichiers grandi a mesure que je scanne et que je trie)
cordialement
Gabriel
Dernière édition: il y a 8 mois 2 semaines par Gabriel.
Connexion ou Créer un compte pour participer à la conversation.
- Alastor
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 35
- Remerciements reçus 1
il y a 8 mois 4 semaines #34106
par Alastor
Réponse de Alastor sur le sujet Avis sur un script qui doit corriger des noms de fichiers avec pleins replace
Bonjour,
Effectivement, tu peux dissocier les règles d'un coté, et leur application de l'autre, c'est plus facile à faire évoluer.
Comme par exemple, avec un array d'array :
Ou quelque chose dans le genre (j'ai pas de powershell sous la main là de suite..
C'est plus élégant avec les objets ou des hashtables, mais ça marche, et pour pouvoir suivre ce qui se passe, mettre un "commentaire" intégré à la règle peut-être sympa, ici utilisé avec le write-verbose.
Effectivement, tu peux dissocier les règles d'un coté, et leur application de l'autre, c'est plus facile à faire évoluer.
Comme par exemple, avec un array d'array :
$Rules = @(
@("{|\(|\[\[","[","qui fait un truc"),
@("}|\)|\}\}","]","qui fait un autre truc")
)
foreach ($CurrentRule in $Rules) {
write-verbose "Rule applied : $($CurrentRule[2])"
$FichierATraiter = $FichierATraiter -replace $CurrentRule[0], $CurrentRule[1]
}
Ou quelque chose dans le genre (j'ai pas de powershell sous la main là de suite..
C'est plus élégant avec les objets ou des hashtables, mais ça marche, et pour pouvoir suivre ce qui se passe, mettre un "commentaire" intégré à la règle peut-être sympa, ici utilisé avec le write-verbose.
Connexion ou Créer un compte pour participer à la conversation.
- Gabriel
- Auteur du sujet
- Hors Ligne
- Membre elite
Réduire
Plus d'informations
- Messages : 248
- Remerciements reçus 1
il y a 8 mois 3 semaines #34110
par Gabriel
Réponse de Gabriel sur le sujet Avis sur un script qui doit corriger des noms de fichiers avec pleins replace
ahh cool en effet
je vais adapter le script en conséquence.
je vais adapter le script en conséquence.
Connexion ou Créer un compte pour participer à la conversation.
- Christophe MELIN
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 26
- Remerciements reçus 4
il y a 8 mois 3 semaines - il y a 8 mois 3 semaines #34111
par Christophe MELIN
Réponse de Christophe MELIN sur le sujet Avis sur un script qui doit corriger des noms de fichiers avec pleins replace
Bonjour,
Je te soumets un bout de code que j'utilise régulièrement dans mes batchs (je suis admin système avec des casquettes Exchange et Sharepoint). Il y a une fonction qui n'est pas forcément des plus propres mais qui fait le boulot attendu.Cela me permet d'avoir le même script et le même fichier de config (quand je mets le contenu de la chaine $inputstr dans un fichier de config .xml) quel que soit le serveur où j'exécute le batch.
Je te soumets un bout de code que j'utilise régulièrement dans mes batchs (je suis admin système avec des casquettes Exchange et Sharepoint). Il y a une fonction qui n'est pas forcément des plus propres mais qui fait le boulot attendu.
Set-PSDebug -Off
set-PSdebug -strict # erreur si utilisation d'une variable pas encore initialisée
#-- initialisation des variables générales --
$start = Get-Date
$startwatch = [system.diagnostics.stopwatch]::StartNew()
$fullscript = $MyInvocation.MyCommand.path
$fullscript = [System.IO.Path]::GetFullPath($fullscript)
$scriptdir = [System.IO.Path]::GetDirectoryName($fullscript)
$scriptname = [System.IO.Path]::GetFileNameWithoutExtension($fullscript)
$scriptext = [System.IO.Path]::GetExtension($fullscript)
$computername = [System.Net.Dns]::GetHostName()
#-------------------------------------------------------------------------------
# début des fonctions standards
#-------------------------------------------------------------------------------
function ReplaceAllStrings()
{
param (
[string] $SearchInStr,
$arrStrings
)
$outstr = $SearchInStr
if ( $arrStrings.GetType().IsArray ) {
foreach ( $item in $arrStrings ) {
if ( $item.GetType().IsArray ) {
if( $item.count -ge 2 ) {
$outstr = $outstr.replace( $item[0], $item[1] )
}
}
}
}
return $outstr
}
#-------------------------------------------------------------------------------
# début des traitements
#-------------------------------------------------------------------------------
$datestr = $start.ToString( 'yyyyMMdd' )
$arrStrings = @(
@( '#datestr#', $datestr ),
@( '#computername#', $computername ),
@( '#scriptdir#', $scriptdir ),
@( '#scriptname#', $scriptname )
)
$inputstr = '
<?xml version="1.0" encoding="ISO-8859-1"?>
<Configuration>
<log>
<path>#scriptdir#\log</path>
<filename>#scriptname#-#datestr#.log</filename>
<computer>#computername#</computer>
</log>
</Configuration>
'
$outstr = ReplaceAllStrings -SearchInStr $inputstr -arrStrings $arrStrings
write-host "imput string :$inputstr"
write-host "output string :$outstr"
Dernière édition: il y a 8 mois 3 semaines par Christophe MELIN.
Connexion ou Créer un compte pour participer à la conversation.
- Alastor
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 35
- Remerciements reçus 1
il y a 8 mois 3 semaines - il y a 8 mois 3 semaines #34113
par Alastor
Réponse de Alastor sur le sujet Avis sur un script qui doit corriger des noms de fichiers avec pleins replace
Ah ! Je ne connaissais pas Set-PSDebug !
Je sais que je dois progresser justement sur le debug !
Merci !
Par contre, pourquoi l'intégrer dans un script ?
Est ce que ça ne devrait pas rester de la responsabilité de l"'environnement d'exécution" ?
Dis autrement, a la main de celui qui lance le script ?
Je sais que je dois progresser justement sur le debug !
Merci !
Par contre, pourquoi l'intégrer dans un script ?
Est ce que ça ne devrait pas rester de la responsabilité de l"'environnement d'exécution" ?
Dis autrement, a la main de celui qui lance le script ?
Dernière édition: il y a 8 mois 3 semaines par Alastor.
Connexion ou Créer un compte pour participer à la conversation.
- Christophe MELIN
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 26
- Remerciements reçus 4
il y a 8 mois 3 semaines #34117
par Christophe MELIN
Réponse de Christophe MELIN sur le sujet Avis sur un script qui doit corriger des noms de fichiers avec pleins replace
Je travaille dans une équipe de production qui gère plusieurs centaines de serveurs Windows. En principe, ce n'est pas en production qu'il faut faire du debug. Cela doit avoir été fait avant et si on rencontre un problème en prod, on repasse hors prod avec gestion manuelle des paramètres d'exécution.
Donc pour éviter des actions inopinées en production, on ajoute cette option dans les scripts qui sont lancés par tâche planifiée ou par l'ordonnanceur centralisé.
Donc pour éviter des actions inopinées en production, on ajoute cette option dans les scripts qui sont lancés par tâche planifiée ou par l'ordonnanceur centralisé.
Les utilisateur(s) suivant ont remercié: Alastor
Connexion ou Créer un compte pour participer à la conversation.
- forum
- PowerShell
- Entraide pour les initiés
- Avis sur un script qui doit corriger des noms de fichiers avec pleins replace
Temps de génération de la page : 0.134 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les initiés
- Avis sur un script qui doit corriger des noms de fichiers avec pleins replace