Question Manipulation répertoire et fichier texte

Plus d'informations
il y a 12 ans 9 mois #15126 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

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

Plus d'informations
il y a 12 ans 9 mois #15127 par phiphi917
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

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

Plus d'informations
il y a 12 ans 9 mois #15128 par phiphi917
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

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

Plus d'informations
il y a 12 ans 9 mois #15131 par Laurent Dardenne
Salut,
une solution pour le premier exemple :
[code:1]
@'
$resultat = get-content E:\test.txt | foreach {
$_ -replace '^(.*)$','1;$0'
}

$resultat
'@ &gt; c:\temp\test.txt

$i=0
$resultat = get-content C:\temp\test.txt |
foreach {
$_.Insert(0,\&quot;$((++$i));\&quot;«»)
#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
&amp;{$Compteur++;Write-Warning \&quot;Compteur=$Compteur\&quot;}
$compteur

#Exécution dans la portée courante , PS utilise la variable existante
$compteur=0
.{$Compteur++;Write-Warning \&quot;Compteur=$Compteur\&quot;}
$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
&amp;{(gv Compteur -Scope 1).Value++ ; Write-Warning \&quot;Compteur=$Compteur\&quot;}
$compteur
[/code:1]

Tutoriels PowerShell

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

Plus d'informations
il y a 12 ans 9 mois #15134 par phiphi917
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
Propulsé par Kunena