Question Troncage volontaire de sortie .

Plus d'informations
il y a 16 ans 1 mois #1664 par sonic
Bonjour ,

Cette fois je veux volontairement tronquer la sortie de:
[code:1]$a=$actuel |where {($_.lastwritetime -gt $derniercheck)-and($_.creationtime -lt $derniercheck)} |
format-table Lastwritetime, Length, name, directoryname -autosize -hideTableHeaders[/code:1]

Je voudrais pourvoir lui dire : Tu m'enlèves les x premier caractère de \"directoryname\" je vois bien comment faire en dos (batch) mais je vais quand même pas faire ca maintenant . J'ai récupéré un exemple que je n'arrive pas a réutiliser . Mais est t'il adaptable ?
[code:1]
$a.substring($a.lastindexof(\"\\"«»)+2,$a.substring($a.lastindexof(\"\\"«»)+4).length-1)
[/code:1]
Cela découpe a souhait la variable . Je voulais adapter ça juste pour la partie \"directoryname\" mais ca ne s'annonce pas simple .
Pour résumer la commande met dans ma variable la date, la taille et le chemin complet du fichier mais je veux lui suprimer systématiquement les 10 premiers caractères par exemple . savoir le faire pour les derniers serai cool aussi mais je devrais me débrouiller une fois sur la piste. Çà donnerait un truc du genre .
Au lieu de c:\dev\rep1\rep2\reptrv
transformer = \reptrv A noter que la partie a supprimer et toujours la même .
Alors voila je cherche encore et toujours .;)

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

Plus d'informations
il y a 16 ans 1 mois #1665 par TIti
Réponse de TIti sur le sujet Re:Troncage volontaire de sortie .
Lo,

Si la partie à supprimer est toujours la même, tu peux le faire de cette façon (je reprends ton exemple):

[code:1]$a=\"c:devrep1rep2reptrv\"
$a.Substring(13)[/code:1]
Tu tronques les X premiers caractères.
C'est vraiment ce que tu souhaites ?

A+
Béru

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

Plus d'informations
il y a 16 ans 1 mois #1666 par daniel soares
la solution tu la trouve dans l'aide de format-table
il te propose de creer des proprietes avec
@{label=...}
en reprenant ton exemple ca donne

[code:1]
$a=$actuel |where {($_.lastwritetime -gt $derniercheck)-and($_.creationtime -lt $derniercheck)} | format-table Lastwritetime, Length, name, @{label=\"partofdirectoryname\";expression={$_.substring($_.lastindexof(\"\\"«»)+2,$_.substring($_.lastindexof(\"\\"«»)+4).length-1)}} -autosize -hideTableHeaders

[/code:1]
partofdirectoryname devient une nouvelle propriete qui reprends ton code basée sur directoryname
mais peut etre que en tapant $actuel | get-member tu trouvera une propriete existante plus apropriée non? $actuel.name?

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

Plus d'informations
il y a 16 ans 1 mois #1667 par Lemaire Patrice
Bon alors, en espérant que je soit pas à coté de la plaque ^^

Tout d’abord, n’oubli pas de mettre le nom de la propriété avant d’appeler les méthodes substring() et lastindexof() hein ^^. Il me semble que ton $actuel est une collection de fichiers, et donc d’objets.

Si tu veux utiliser la méthode « SubString », ca donnerait plutôt ca :
Dans la mesure où $_ représente un objet fichier.
[code:1] $_.DirectoryName.Substring($_.DirectoryName.LastIndexOf('\')+1)[/code:1]
Résultat: NomFichier.ext

En clair, tu lui dis de prendre la partie de la chaine de caractère qui correspond à la position du dernier séparateur (ici « \ ») + 1, et comme tu ne précise pas de position de fin, il va jusqu’au bout.

Tu peux aussi utiliser la solution de DAN. En y ajoutant même un peu de formatage, voir même de la clarté.
Déclare ton formatage en avance !!
[code:1]$MonFormat = @{Expression={$_.Lastwritetime };Label=\"Derniere Modif\";width=25}, `
@{Expression={$_.Length };Label=\"Taille\";width=15}, `
@{Expression={$_.Name};Label=\"Nom\";width=40},`
@{Expression={$_.DirectoryName.Substring($_.DirectoryName.LastIndexOf('\')+1)};Label=\"Fichier\";width=40}[/code:1]
Et ensuite tu utilise ce format dans ta commande :
[code:1] $a=$actuel |where {($_.lastwritetime -gt $derniercheck)-and($_.creationtime -lt $derniercheck)} | format-table $MonFormat [/code:1]

Ce qui me surprend le plus c’est que si on parle bien d’un objet fichier alors :
Si le fichier est « c:\rep1\rep2\rep3\fichier.txt »
$_.DirectoryName donne « c:\rep1\rep2\rep3 »
$_.Name donne « fichier.txt »
$_.FullName donne « c:\rep1\rep2\rep3\fichier.txt »

Il n’y a pas un autre problème quelque part ?

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

Plus d'informations
il y a 16 ans 1 mois #1672 par sonic
Réponse de sonic sur le sujet Re:Troncage volontaire de sortie .
Oulalala
merci pour tout ca je vais tout tester .
sinon non je pense pas qu'il y ai un autre problème .
Voici une plus grosse partie du code :
$rep est un répertoire a surveiller .On y surveille l'activité sur les fichiers .
[code:1]$ancien = get-childitem $rep -r |Where-Object {$_.PSIsContainer -eq 0}
$trace =\"VRAI\"
$fichier_log = \"C:\APPL\admin\repsurveille.log\"
$ficok=\"C:\APPL\admin\ok.txt\"
$mail_desti= \" toto@tutu.fr\"

\"DEPART\" >> $fichier_log

while ($derniercheck -ne $null)
{
start-sleep -s $tempo

echo \"Itération du:\" >> $fichier_log
get-date >> $fichier_log
\"Photo des repertoires\" >> $fichier_log
$actuel = get-childitem $rep -r |Where-Object {$_.PSIsContainer -eq 0}
get-date >> $fichier_log

\"fichiers modifiés\" >> $fichier_log
$a=$actuel |where {($_.lastwritetime -gt $derniercheck)-and($_.creationtime -lt $derniercheck)} |
format-table Lastwritetime, Length, name, directoryname -autosize -hideTableHeaders
get-date >> $fichier_log
\"fichiers crees\" >> $fichier_log
$b=$actuel |where {($_.creationtime -gt $derniercheck)} |
format-table Lastwritetime, Length, name, directoryname -autosize -hideTableHeaders
get-date >> $fichier_log
# \"fichiers renomés\"
# $c=$actuel | where {(($ancien | foreach {$_.name}) -notcontains $_.name)-and ($_.creationtime -lt $derniercheck)}|
format-table Lastwritetime, Length, name, directoryname -autosize -hideTableHeaders
# get-date
# \"fichiers supprimés\"
# $d=$ancien |where {((get-childitem $rep -r $_) -eq $null)} |
format-table Lastwritetime, Length, name, directoryname -autosize -hideTableHeaders
# get-date[/code:1]

j'envoie la liste des fichiers modifiés dans une variable .Les destinataires du mail n'ont pas besoin de connaitre le début du chemin c'est donc çà que je veu supprimer .
Heu .... sinon je voudrais aussi pouvoir mettre name date directoryname a la ligne et non sur 1 seule ligne pour des questions de lisibilité .

Je teste tout ça et je vous tien au courant .

Message édité par: sonic31, à: 14/02/08 13:52<br><br>Message édité par: sonic31, à: 14/02/08 14:25

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

Plus d'informations
il y a 16 ans 1 mois #1674 par sonic
Réponse de sonic sur le sujet Re:Troncage volontaire de sortie .
J'ai fait quelque test .
J'ai modifié comme suit:
[code:1]$a=$actuel |where {($_.lastwritetime -gt $derniercheck)-and($_.creationtime -lt $derniercheck)} | format-table Lastwritetime, Length,name @{label=\&quot;partofdirectoryname\&quot;;expression={$_.DirectoryName.substring($_.DirectoryName.lastindexof(\&quot;\\&quot;«»)+1)}} -autosize -hideTableHeaders[/code:1]
Mais pour le coup moi qui voulais tronquer le chemin des fichier il est carrément supprimé quand j'arrive à le faire fonctionner .icic si je laisse le 2eme DirectoryName ca plante . Si il n'y est pas j'ai pas de chemin .
J'ai du faire une boulette .
j'ai donc ca si 1 seul fichier modifié (si 2 ben j'aurai 2 lignes )
14/02/2008 14:29:16 17 Copie de Copie de Nouveau Document texte (14).txt
Il me manque le chemin qui venait juste derrière .
J'étudie la question .<br><br>Message édité par: sonic31, à: 14/02/08 14:53

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

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