Question Traitement par lot

Plus d'informations
il y a 16 ans 5 mois #1212 par didine
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 :sick:<br><br>Message édité par: Arnaud, à: 30/11/07 10:03

NEWTON_

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

Plus d'informations
il y a 16 ans 5 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

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

Plus d'informations
il y a 16 ans 5 mois #1227 par didine
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 \&quot;[END]\&quot; |
select-string \&quot;GR\d|GRP|GR\s\&quot; |
set-content -encoding ASCII ($_.name -replace \&quot;t(.+)\.txt\&quot;,\&quot;s$+.txt\&quot;«»)
}
[/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.

Plus d'informations
il y a 16 ans 5 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 \&quot;t(.+)\.txt\&quot;,'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&gt; $nom = \&quot;newt\&quot;
PS&gt; \&quot;Hello $nom\&quot;
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&gt; \&quot;Hello $nom. Nous sommes le $((get-date).ToShortDateString()).\&quot;
Hello newt. Nous sommes le 23/10/2007.
[/code:1]
Pour en revenir à ton script, la chaîne \&quot;s$+.txt\&quot; peut être vue par PowerShell comme contenant la variable $+, qui est nulle à priori. Il remplace donc les caractères \&quot;$+\&quot; par rien, et il passe la chaîne \&quot;s.txt\&quot; à 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&gt; $nom = \&quot;newt\&quot;
PS&gt; 'Hello $newt'
Hello $newt

PS&gt; \&quot;t105.txt\&quot; -replace \&quot;t(.*)\.txt\&quot;,'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&gt; \&quot;t105.txt\&quot; -replace \&quot;t(.*)\.txt\&quot;,'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.

Plus d'informations
il y a 16 ans 5 mois #1229 par didine
Réponse de didine sur le sujet Re:TRAITEMENT PAR LOT
JANEL

T' es un Magicien :woohoo: !!!

Il m'a juste fallut remplacer $_.name par \&quot;$_\&quot;
sans aucune \&quot;logique\&quot; juste en suivant l'exemple que as mis et çà marche nickel !!!


soit:

[code:1]\&quot;$_\&quot; -replace \&quot;t(.+)\.txt\&quot;,'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.

Plus d'informations
il y a 16 ans 5 mois #1230 par didine
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\&quot;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.075 secondes
Propulsé par Kunena