Question
Manipulation répertoire et fichier texte
- phiphi917
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 27
- Remerciements reçus 0
il y a 12 ans 9 mois #15126
par phiphi917
Manipulation répertoire et fichier texte a été créé par phiphi917
Bonjour,
je voudrais savoir si vous auriez une piste à me donner pour mon script powershell.
Je voudrais faire 2 choses :
- je voudrais numéroter chaque ligne d'un texte avec comme séparateur ;
exemple :
1 ; texte
2 ; texte
3 ; texte
- je voudrais renommer tous les sous-répertoire d'un répertoire.
1er répertoire renommé en 1
2ème répertoire renommé en 2
3ème répertoire renommé en 3
on incrémente de 1 à chaque fois.
Je pense que dans les 2 cas je dois faire une variable que j'incrémente de 1.
Mais j'y arrive pas.
sa me mets que des 1
je voudrais savoir si vous auriez une piste à me donner pour mon script powershell.
Je voudrais faire 2 choses :
- je voudrais numéroter chaque ligne d'un texte avec comme séparateur ;
exemple :
1 ; texte
2 ; texte
3 ; texte
- je voudrais renommer tous les sous-répertoire d'un répertoire.
1er répertoire renommé en 1
2ème répertoire renommé en 2
3ème répertoire renommé en 3
on incrémente de 1 à chaque fois.
Je pense que dans les 2 cas je dois faire une variable que j'incrémente de 1.
Mais j'y arrive pas.
sa me mets que des 1
Connexion ou Créer un compte pour participer à la conversation.
- phiphi917
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 27
- Remerciements reçus 0
il y a 12 ans 9 mois #15127
par phiphi917
Réponse de phiphi917 sur le sujet Re:Manipulation répertoire et fichier texte
Pour le 1er cas
[code:1]$resultat = get-content E:\test.txt | foreach {
$_ -replace '^(.*)$','1;$0'
}
$resultat[/code:1]<br><br>Message édité par: phiphi917, à: 13/06/13 18:59
[code:1]$resultat = get-content E:\test.txt | foreach {
$_ -replace '^(.*)$','1;$0'
}
$resultat[/code:1]<br><br>Message édité par: phiphi917, à: 13/06/13 18:59
Connexion ou Créer un compte pour participer à la conversation.
- phiphi917
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 27
- Remerciements reçus 0
il y a 12 ans 9 mois #15128
par phiphi917
Réponse de phiphi917 sur le sujet Re:Manipulation répertoire et fichier texte
Pour le 2ème cas :
Je suis parti pour dans un 1er temps de mettre le chemin de tout les répertoires dans un fichier.txt
[code:1]
$compteur=0
get-content E:\test.txt | foreach {
Rename-Item -path $_ -newName $compteur++
}[/code:1]
sauf que la aussi le compteur j'y arrive pas
Je suis parti pour dans un 1er temps de mettre le chemin de tout les répertoires dans un fichier.txt
[code:1]
$compteur=0
get-content E:\test.txt | foreach {
Rename-Item -path $_ -newName $compteur++
}[/code:1]
sauf que la aussi le compteur j'y arrive pas
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 12 ans 9 mois #15131
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Manipulation répertoire et fichier texte
Salut,
une solution pour le premier exemple :
[code:1]
@'
$resultat = get-content E:\test.txt | foreach {
$_ -replace '^(.*)$','1;$0'
}
$resultat
'@ > c:\temp\test.txt
$i=0
$resultat = get-content C:\temp\test.txt |
foreach {
$_.Insert(0,\"$((++$i));\"«»)
#ou
#$_.Insert(0,( ($i++).ToString()+';' ))
}
$resultat
[/code:1]
Note que pour :
[code:1]
$i=0
$i++
$i
[/code:1]
bien que l'incrémentation soit effective, l'opération ne renvoie rien dans le pipeline, mais cette syntaxe :
[code:1]
$i=0
($i++)
[/code:1]
renvoie bien une valeur.
Une solution pour le second exemple :
[code:1]
$compteur=0
Dir|
Where-Object {$_.PSIsContainer}|
Rename-Item -newName { ( (Get-Variable Compteur -Scope 1).Value++ ) } -whatif
[/code:1]
Dans ce cas on doit utiliser un scriptblock afin qu'il soit exécuté à chaque réception d'objet,sinon la substitution de variable ne se fait qu'une seule fois, lors du premier appel.
Et comme Powershell utilise la notion de portée (scope), cela nous oblige à référencer la variable définie dans la portée de l'appelant :
[code:1]
#Exécution dans une nouvelle portée, PS crée une nouvelle variable
#PROBLEME
$compteur=0
&{$Compteur++;Write-Warning \"Compteur=$Compteur\"}
$compteur
#Exécution dans la portée courante , PS utilise la variable existante
$compteur=0
.{$Compteur++;Write-Warning \"Compteur=$Compteur\"}
$compteur
#Solution du probléme précédent
#Exécution dans une nouvelle portée, mais usage d'une variable
#existante dans la porté de l'appelant
$compteur=0
&{(gv Compteur -Scope 1).Value++ ; Write-Warning \"Compteur=$Compteur\"}
$compteur
[/code:1]
une solution pour le premier exemple :
[code:1]
@'
$resultat = get-content E:\test.txt | foreach {
$_ -replace '^(.*)$','1;$0'
}
$resultat
'@ > c:\temp\test.txt
$i=0
$resultat = get-content C:\temp\test.txt |
foreach {
$_.Insert(0,\"$((++$i));\"«»)
#ou
#$_.Insert(0,( ($i++).ToString()+';' ))
}
$resultat
[/code:1]
Note que pour :
[code:1]
$i=0
$i++
$i
[/code:1]
bien que l'incrémentation soit effective, l'opération ne renvoie rien dans le pipeline, mais cette syntaxe :
[code:1]
$i=0
($i++)
[/code:1]
renvoie bien une valeur.
Une solution pour le second exemple :
[code:1]
$compteur=0
Dir|
Where-Object {$_.PSIsContainer}|
Rename-Item -newName { ( (Get-Variable Compteur -Scope 1).Value++ ) } -whatif
[/code:1]
Dans ce cas on doit utiliser un scriptblock afin qu'il soit exécuté à chaque réception d'objet,sinon la substitution de variable ne se fait qu'une seule fois, lors du premier appel.
Et comme Powershell utilise la notion de portée (scope), cela nous oblige à référencer la variable définie dans la portée de l'appelant :
[code:1]
#Exécution dans une nouvelle portée, PS crée une nouvelle variable
#PROBLEME
$compteur=0
&{$Compteur++;Write-Warning \"Compteur=$Compteur\"}
$compteur
#Exécution dans la portée courante , PS utilise la variable existante
$compteur=0
.{$Compteur++;Write-Warning \"Compteur=$Compteur\"}
$compteur
#Solution du probléme précédent
#Exécution dans une nouvelle portée, mais usage d'une variable
#existante dans la porté de l'appelant
$compteur=0
&{(gv Compteur -Scope 1).Value++ ; Write-Warning \"Compteur=$Compteur\"}
$compteur
[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- phiphi917
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 27
- Remerciements reçus 0
il y a 12 ans 9 mois #15134
par phiphi917
Réponse de phiphi917 sur le sujet Re:Manipulation répertoire et fichier texte
Merci pour ta réponse je vais essayer ça
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.046 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Manipulation répertoire et fichier texte