Question
Problème de syntaxe
- Fred
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 10
- Remerciements reçus 0
Avant tout, je m'excuse d'avance pour ma question très basique de syntaxe.
D'ailleurs mes principaux problèmes avec PS sont surtout d'ordre syntaxique..
Powershell étant un langage tellement accessible, que j'ai eu le tort d'attaquer certains scripts en me passant des bases. Malgré le livre PS V3 sur mon bureau.
Je suis en PS V3.
Lorsque je créé une boucle pour ziper des fichiers, je suis obligé de passer par X variables :
[code:1] foreach ($item in $ListeFichiersZipJ2)
{
Write-Host -ForegroundColor Green `n \"Nom du fichier traité : \"$ListeFichiersZipJ2[$m] `n
$file = $ListeFichiersZipJ2[$m].BaseName
$a = $DossiersCibles.Arborescence[$n]
$zip = \"$a\$file.zip\"
$Bfile = $ListeFichiersZipJ2[$m].DirectoryName
$Cfile = $ListeFichiersZipJ2[$m].Name
$Dfile = \"$Bfile\$Cfile\"
& \"C:\Program Files\7-Zip\7z.exe\" a \"$zip\" \"$Dfile\" 1>test.log *>&1
...[/code:1]
Je ne doute pas qu'un langage aussi puissant que PS doit me permettre de concaténer cette galère.
Mon problème est qu'il ne prend pas ce genre de raccourci :
$zip = \"$DossiersCibles.Arborescence[$n]\$zip.zip\"
Précision : $DossiersCibles est un import CSV au format arborescence;intitulé;nombre
Comment lui faire comprendre que Arborescence est la colonne et non pas du texte, j'ai testé crochets, parenthèses, mais pas trouvé.
Merci d'avance.<br><br>Message édité par: Fred124, à: 2/07/15 12:06
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Fred124 écrit:
La substitution nécessite la syntaxe suivante : \"texte $(code) texte\"Comment lui faire comprendre que Arborescence est la colonne et non pas du texte, j'ai testé crochets, parenthèses, mais pas trouvé.
[code:1]$zip = \"$($DossiersCibles.Arborescence[$n])$zip.zip\"
[/code:1]
Ainsi la substitution exécute d'abord le code contenu ,concatène son résultat puis renvoie la nouvelle chaîne.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
- Messages : 1778
- Remerciements reçus 21
On a tous été débutant !Avant tout, je m'excuse d'avance pour ma question très basique de syntaxe.
euh...oui !j'ai eu le tort d'attaquer certains scripts en me passant des bases.
il faut lui faire comprendre que tu veux la propriété(Arborescence) d'un objet($DossiersCibles)$zip = \"$DossiersCibles.Arborescence[$n]\$zip.zip\"
Comment lui faire comprendre que Arborescence est la colonne et non pas du texte, j'ai testé crochets, parenthèses, mais pas trouvé.
c'est les parenthèses mais avec le dollar devant comme une variable
soit : $zip = \"$($DossiersCibles.Arborescence[$n])\$zip.zip\"
j'espère que c'est clair
poussé à l'extrême l'extrait de ton script, tu peut ne gardé que cette ligne dans ta boucle (avec le write biensur) :
[code:1]& \"C:\Program Files\7-Zip\7z.exe\" a \"$($DossiersCibles.Arborescence[$n])\$($ListeFichiersZipJ2[$m].BaseName).zip\" \"$($ListeFichiersZipJ2[$m].DirectoryName)\$($ListeFichiersZipJ2[$m].Name)\" 1>test.log *>&1[/code:1]
par contre pourquoi ne pas utilisé le $item de ta boucle plutôt que $ListeFichiersZipJ2[$m] ?
.
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
- Messages : 1778
- Remerciements reçus 21
On n'a répondu presque en même temps. le temps de rédigé le message !!
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Ici l'usage de la notion de variable est malvenue, il s'agit d'une des constructions de groupement : (), $() @()mais avec le dollar devant comme une variable
Le dollar détermine quel type de groupement le parseur doit traiter, l'autre construction de variable est celle-ci :
[code:1]
${Nom - étendu *}=10
Dir variable:N*
[/code:1]
Oui je sais, c'est un détail
[Mode avancé]
Avec l'AST 'on voit' la notion d'expression, d'expression imbriquée et de sous expression :
[code:1]
#PS V3 et +
$sb={
\"$($a)\"
(dir).name
@(dir c:\;dir g:\)
}
$sb.ast.EndBlock.Statements
$sb.ast.EndBlock.Statements[0].PipelineElements[0].Expression.NestedExpressions
$sb.ast.EndBlock.Statements[1].PipelineElements[0].Expression.Expression.Pipeline.PipelineElements
$sb.ast.EndBlock.Statements[2].PipelineElements[0].Expression.SubExpression.Statements[0].PipelineElements
[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Fred
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 10
- Remerciements reçus 0
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Problème de syntaxe