Question Problème de syntaxe

Plus d'informations
il y a 10 ans 8 mois #20354 par Fred
Problème de syntaxe a été créé par Fred
Bonjour,
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.

Plus d'informations
il y a 10 ans 8 mois #20355 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Problème de syntaxe
Salut,
Fred124 écrit:

Comment lui faire comprendre que Arborescence est la colonne et non pas du texte, j'ai testé crochets, parenthèses, mais pas trouvé.

La substitution nécessite la syntaxe suivante : \&quot;texte $(code) texte\&quot;
[code:1]$zip = \&quot;$($DossiersCibles.Arborescence[$n])$zip.zip\&quot;
[/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.

Plus d'informations
il y a 10 ans 8 mois #20356 par Philippe
Réponse de Philippe sur le sujet Re:Problème de syntaxe
Fred124 écrit:

Avant tout, je m'excuse d'avance pour ma question très basique de syntaxe.

On a tous été débutant !

j'ai eu le tort d'attaquer certains scripts en me passant des bases.

euh...oui !

$zip = \&quot;$DossiersCibles.Arborescence[$n]\$zip.zip\&quot;

Comment lui faire comprendre que Arborescence est la colonne et non pas du texte, j'ai testé crochets, parenthèses, mais pas trouvé.

il faut lui faire comprendre que tu veux la propriété(Arborescence) d'un objet($DossiersCibles)
c'est les parenthèses mais avec le dollar devant comme une variable :evil:

soit : $zip = \&quot;$($DossiersCibles.Arborescence[$n])\$zip.zip\&quot;

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]&amp; \&quot;C:\Program Files\7-Zip\7z.exe\&quot; a \&quot;$($DossiersCibles.Arborescence[$n])\$($ListeFichiersZipJ2[$m].BaseName).zip\&quot; \&quot;$($ListeFichiersZipJ2[$m].DirectoryName)\$($ListeFichiersZipJ2[$m].Name)\&quot; 1&gt;test.log *&gt;&amp;1[/code:1]
:evil: :evil:


par contre pourquoi ne pas utilisé le $item de ta boucle plutôt que $ListeFichiersZipJ2[$m] ? :whistle:
.

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

Plus d'informations
il y a 10 ans 8 mois #20357 par Philippe
Réponse de Philippe sur le sujet Re:Problème de syntaxe
Salut Laurent

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.

Plus d'informations
il y a 10 ans 8 mois #20359 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Problème de syntaxe
6ratgus écrit:

mais avec le dollar devant comme une variable

Ici l'usage de la notion de variable est malvenue, il s'agit d'une des constructions de groupement : (), $() @()
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={
\&quot;$($a)\&quot;
(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.

Plus d'informations
il y a 10 ans 8 mois #20373 par Fred
Réponse de Fred sur le sujet Re:Problème de syntaxe
Merci à vous 2 pour ces précisions, je vais pouvoir condenser mes scripts :)

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

Temps de génération de la page : 0.053 secondes
Propulsé par Kunena