Question
Traitement par lot
- didine
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 29
- Remerciements reçus 0
il y a 17 ans 3 mois #1212
par didine
NEWTON_
Traitement par lot a été créé par didine
Bonjour,
En fait il semble que ce soit du traitement par lot
comme renommer tous les fichiers .txt
d'un répertoire ....
Je planche sur foreach et j'ai utilisé
about_foreach pour l'aide
je parviens à les parcourir tous mais après ?????
prendre chaque fichier d'un répertoire > OK
traiter le fichier > OK
l'enregistrer sous un autre nom,pour chacun > négatif
Je ne vois pas , pas du tout
<br><br>Message édité par: Arnaud, à: 30/11/07 10:03
En fait il semble que ce soit du traitement par lot
comme renommer tous les fichiers .txt
d'un répertoire ....
Je planche sur foreach et j'ai utilisé
about_foreach pour l'aide

je parviens à les parcourir tous mais après ?????
prendre chaque fichier d'un répertoire > OK
traiter le fichier > OK
l'enregistrer sous un autre nom,pour chacun > négatif
Je ne vois pas , pas du tout

NEWTON_
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 17 ans 3 mois #1214
par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:TRAITEMENT PAR LOT
Voir ma réponse à ton autre fil de discussion pour une solution possible.
Selon le contexte, d'autres solutions sont possibles, mais à priori elles reposeront toutes sur le principe de remplacement par une expression régulière.
Janel
Selon le contexte, d'autres solutions sont possibles, mais à priori elles reposeront toutes sur le principe de remplacement par une expression régulière.
Janel
Connexion ou Créer un compte pour participer à la conversation.
- didine
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 29
- Remerciements reçus 0
il y a 17 ans 3 mois #1227
par didine
NEWTON_
Réponse de didine sur le sujet Re:TRAITEMENT PAR LOT
Rien à faire
j'ai eu beau chercher puis chercher encore
en vain:(
[code:1]dir c:\mhd\t*.txt | foreach {
get-content $_ -delimiter \"[END]\" |
select-string \"GR\d|GRP|GR\s\" |
set-content -encoding ASCII ($_.name -replace \"t(.+)\.txt\",\"s$+.txt\"«»)
}
[/code:1]
cà compile
pas d'erreur
mais aucun fichiers de sortie s1 , s2 , ....
et pire t1 , t2 , ...
ne sont pas modifier par la procédure .
Que faire ????
Merci
j'ai eu beau chercher puis chercher encore
en vain:(
[code:1]dir c:\mhd\t*.txt | foreach {
get-content $_ -delimiter \"[END]\" |
select-string \"GR\d|GRP|GR\s\" |
set-content -encoding ASCII ($_.name -replace \"t(.+)\.txt\",\"s$+.txt\"«»)
}
[/code:1]
cà compile
pas d'erreur
mais aucun fichiers de sortie s1 , s2 , ....
et pire t1 , t2 , ...
ne sont pas modifier par la procédure .
Que faire ????
Merci
NEWTON_
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 17 ans 3 mois #1228
par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:TRAITEMENT PAR LOT
Je ne suis pas sûr de pouvoir reproduire exactement la configuration qui est la tienne, mais chez moi ça marche nickel.
Quoi qu'il en soit, regarde si ça marche mieux en mettant l'expression régulière entre apostrophes au lieu des guillemets:
[code:1]
$_.name -replace \"t(.+)\.txt\",'s$+.txt'
[/code:1]
Quand une chaîne est constituée de guillemets, PowerShell regarde s'il y a des expressions à l'intérieur, et évalue ces expressions avant de passer la chaîne à la commande.
Une expression, dans sa forme la plus simple, est une variable (un $ suivi le plus souvent d'un ensemble de lettres et de chiffres):
[code:1]
PS> $nom = \"newt\"
PS> \"Hello $nom\"
Hello newt
[/code:1]
Une expression peut aussi être la propriété particulière d'une variable, ou un ensemble de commandes plus ou moins complexe. Dans ce cas, l'expression sera entre parenthèses précédées du fameux $:
[code:1]
PS> \"Hello $nom. Nous sommes le $((get-date).ToShortDateString()).\"
Hello newt. Nous sommes le 23/10/2007.
[/code:1]
Pour en revenir à ton script, la chaîne \"s$+.txt\" peut être vue par PowerShell comme contenant la variable $+, qui est nulle à priori. Il remplace donc les caractères \"$+\" par rien, et il passe la chaîne \"s.txt\" à l'opérateur -replace, qui ne peut pas faire grand chose avec si ce n'est créer indéfiniment un nom de fichier s.txt.
Pour t'en sortir, tu peux utiliser les apostrophes qui indiquent à PowerShell de ne pas regarder à l'intérieur de la chaîne:
[code:1]
PS> $nom = \"newt\"
PS> 'Hello $newt'
Hello $newt
PS> \"t105.txt\" -replace \"t(.*)\.txt\",'s$+.txt'
s105.txt[/code:1]
Tiens-moi au courant, car il est possible que ma version de PowerShell ait un comportement différent de la tienne, ce qui obligerait à trouver une autre solution que celle que je te propose ci-dessus.
Par exemple, tu peux aussi utiliser une légère variante:
[code:1]
PS> \"t105.txt\" -replace \"t(.*)\.txt\",'s$1.txt'
s105.txt[/code:1]
Là, je remplace juste $+ par $1. L'idée est toujours de mettre l'expression régulière entre apostrophes pour éviter que $1 soit évalué avant que l'expression soit passée à -replace.
Janel
Quoi qu'il en soit, regarde si ça marche mieux en mettant l'expression régulière entre apostrophes au lieu des guillemets:
[code:1]
$_.name -replace \"t(.+)\.txt\",'s$+.txt'
[/code:1]
Quand une chaîne est constituée de guillemets, PowerShell regarde s'il y a des expressions à l'intérieur, et évalue ces expressions avant de passer la chaîne à la commande.
Une expression, dans sa forme la plus simple, est une variable (un $ suivi le plus souvent d'un ensemble de lettres et de chiffres):
[code:1]
PS> $nom = \"newt\"
PS> \"Hello $nom\"
Hello newt
[/code:1]
Une expression peut aussi être la propriété particulière d'une variable, ou un ensemble de commandes plus ou moins complexe. Dans ce cas, l'expression sera entre parenthèses précédées du fameux $:
[code:1]
PS> \"Hello $nom. Nous sommes le $((get-date).ToShortDateString()).\"
Hello newt. Nous sommes le 23/10/2007.
[/code:1]
Pour en revenir à ton script, la chaîne \"s$+.txt\" peut être vue par PowerShell comme contenant la variable $+, qui est nulle à priori. Il remplace donc les caractères \"$+\" par rien, et il passe la chaîne \"s.txt\" à l'opérateur -replace, qui ne peut pas faire grand chose avec si ce n'est créer indéfiniment un nom de fichier s.txt.
Pour t'en sortir, tu peux utiliser les apostrophes qui indiquent à PowerShell de ne pas regarder à l'intérieur de la chaîne:
[code:1]
PS> $nom = \"newt\"
PS> 'Hello $newt'
Hello $newt
PS> \"t105.txt\" -replace \"t(.*)\.txt\",'s$+.txt'
s105.txt[/code:1]
Tiens-moi au courant, car il est possible que ma version de PowerShell ait un comportement différent de la tienne, ce qui obligerait à trouver une autre solution que celle que je te propose ci-dessus.
Par exemple, tu peux aussi utiliser une légère variante:
[code:1]
PS> \"t105.txt\" -replace \"t(.*)\.txt\",'s$1.txt'
s105.txt[/code:1]
Là, je remplace juste $+ par $1. L'idée est toujours de mettre l'expression régulière entre apostrophes pour éviter que $1 soit évalué avant que l'expression soit passée à -replace.
Janel
Connexion ou Créer un compte pour participer à la conversation.
- didine
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 29
- Remerciements reçus 0
il y a 17 ans 3 mois #1229
par didine
NEWTON_
Réponse de didine sur le sujet Re:TRAITEMENT PAR LOT
JANEL
T' es un Magicien
!!!
Il m'a juste fallut remplacer $_.name par \"$_\"
sans aucune \"logique\" juste en suivant l'exemple que as mis et çà marche nickel !!!
soit:
[code:1]\"$_\" -replace \"t(.+)\.txt\",'GR$+.txt'[/code:1]
Et comme tu peux constater en regardant l'heure
ton post est arrivé à point ....
je testais , testais janel posta et ...
la lumière fut
Encore merci à toi
Toujours là.BRAVO !
C'est magique le script quand on a un bon ...prof
T' es un Magicien

Il m'a juste fallut remplacer $_.name par \"$_\"
sans aucune \"logique\" juste en suivant l'exemple que as mis et çà marche nickel !!!
soit:
[code:1]\"$_\" -replace \"t(.+)\.txt\",'GR$+.txt'[/code:1]
Et comme tu peux constater en regardant l'heure
ton post est arrivé à point ....
je testais , testais janel posta et ...
la lumière fut

Encore merci à toi
Toujours là.BRAVO !
C'est magique le script quand on a un bon ...prof
NEWTON_
Connexion ou Créer un compte pour participer à la conversation.
- didine
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 29
- Remerciements reçus 0
il y a 17 ans 3 mois #1230
par didine
NEWTON_
Réponse de didine sur le sujet Re:TRAITEMENT PAR LOT
Toutefois je ne peux m'empêcher de faire
une remarque.
Je débute en powershell et mon avis vaut ce qu'il vaut...
J'ai passé beaucoup de nuits à chercher à comprendre ,
et je sais que tel est le prix à payer dans l'apprentissage des langages!
Cependant je suis un peu contrarié par le peu de tuto
et de ressources pour les débutants.
Pour ma part sans JANEL et sans ARNAUD il eut été impossible d'avancer réellement !
Alors q\"en perl par exemple (que je suis en train d'aborder à petit pas) il y a des cours des tutos etc.
Enfin c'est peut être parce que powershell est finallement ...un nouvea né !!
une remarque.
Je débute en powershell et mon avis vaut ce qu'il vaut...
J'ai passé beaucoup de nuits à chercher à comprendre ,
et je sais que tel est le prix à payer dans l'apprentissage des langages!
Cependant je suis un peu contrarié par le peu de tuto
et de ressources pour les débutants.
Pour ma part sans JANEL et sans ARNAUD il eut été impossible d'avancer réellement !
Alors q\"en perl par exemple (que je suis en train d'aborder à petit pas) il y a des cours des tutos etc.
Enfin c'est peut être parce que powershell est finallement ...un nouvea né !!
NEWTON_
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.123 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Traitement par lot