Question [resolu ]récupération valeur et comparaison

Plus d'informations
il y a 9 ans 4 mois #22899 par hays
Bonjour à tous et bonne années,

j'ai un petit projet de débutant pour me former petit à petit.


je cherche à créer une faq tiddly wiki, c'est une page web pour de la docs en interne.


Toutes mes documentations sont sur un système de fichier Windows, rangé correctement par catégorie.


Jusque la Je récupère tous les fichier texte de mon dossier documentation que j'importent dans des fichier .tid, pareil pour les PDF ainsi qu'une conversion
des doc/docx en PDF avec la création d'un fichier .meta que requière la solution tiddely.


j'ai deux choses à faire qui me bloque maintenant, la première est que je veux créer des TAGS dans tiddly pour gérer des catégories.

Ce que je veux c'est récupérer le nom du dossier parent de chaque élément à traité, qui correspond à la catégorie et donc au tags.


j'utilise donc ces propriétés.
[code:1]

TypeName : System.IO.FileInfo

Directory Property System.IO.DirectoryInfo Directory {get;}
DirectoryName Property string DirectoryName {get;}
[/code:1]


le problème est que lors du add-content pour ajouté la ligne TAGS : \"catégorie\" il m'écrit le chemin complet alors que dans la console j'ai bien juste le nom.
je ne comprend pas trop pourquoi, je n'ai pas le même résultat ?



le second soucis:

Etant données que tout est dans des fichier texte et que j'ai une balise contenant la date de modification dans chaque fichier modifié par tiddly,

j'aimerais savoir comment je peut comparer la date de modification d'un fichier, dans le système Windows, et, la date de modification renseigné dans tiddly ?


je sais pas si c'est faisable pour le deuxième soucis


voici à quoi ça ressemble pour l'instant
[code:1]# Nom du script
# V1
#Requires -version 3
##Requires -Modules PSWorkflow, @{moduleName=\"DataOnTap\";ModuleVersion=3.2.0}

##Requires -PSSnapin DiskSnapin -Version 1.2
##Requires -RunAsAdministrator




# Déclaration de variables


#$Host.PrivateData.set_ErrorforegroundColor('red')
$ErrorActionPreference= 'continue'
$pathsource=\"c:\mytest\\"
$pathdest=\"c:\mytest2\\"
$datecrea=get-date -format yyyyMMddHHmmssmms
$rep_source=Get-ChildItem $pathsource -filter *.txt -Recurse #| ForEach-Object{$_.BaseName}
$search_pdf=Get-ChildItem $pathsource -filter *.pdf -Recurse

$rep_dest=Get-ChildItem $pathdest -filter *.tid -Recurse -Force

#$Fichier=new-object system.IO.FileInfo $pathdest\$item_source.BaseName + \"tid\"
#$a=$Fichier.Get_Exists()
#DECLARATION DE FONCTION


# debut du cript
# Création des tid avec import des info lié

foreach ($item_source in $rep_source)
{
$filetest= $pathdest+ $item_source.BaseName +\".tid\" # afin de generer un testpath su fichier tid

#$logs= $errortid >>c:\log.txt
#-errorvariable errortid [System.IO.IOException]
$titre_element= $item_source.BaseName
$tags= $item_source.Directory
if (test-Path \"$filetest\"«») {
write-host \"le fichier existe deja\"
}
else {
New-Item \"$pathdest\$item_source\" -Force -Type file
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_source\" -Value \"created: $datecrea\"
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_source\" -Value \"creator: admin\"
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_source\" -Value \"modified: $datecrea\"
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_source\" -Value \"title: $titre_element\"
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_source\" -Value \"tags: $tags\"
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_source\" -Value \"type: text/plain `n `n `n\"
# Add-Content -Path \"$pathdest\$item_source\" -Value \"`n `n `n `n `n `n\"
Add-Content -Encoding UTF8 -Path $pathdest\$item_source -Value (get-content $item_source.Fullname)
get-item -Path $pathdest\$item_source | Rename-Item -NewName {$_.name -replace \".txt$\",\".tid\"}; #

}
}

foreach ($item_pdf in $search_pdf)
{
$filetest_pdf= $pathdest+ $item_pdf#.BaseName +\".pdf\"
if (test-Path \"$filetest_pdf\"«») {
write-host \"le fichier pdf et meta existe deja\"
}
else {
$titre_element_pdf= $item_pdf.BaseName
$strFile = $pathdest+ $item_pdf +\".meta\"
New-Item $strFile -Type file
Copy-Item $item_pdf.FullName -Destination $pathdest
#$col_meta=Get-ChildItem $pathdest -filter *.meta -Recurse
$item_meta= $item_pdf.Name +\".meta\"
$titre_element_meta= $item_pdf.BaseName
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_meta\" -Value \"created: $datecrea\"
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_meta\" -Value \"modified: $datecrea\"
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_meta\" -Value \"title: $titre_element_meta\"
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_meta\" -Value \"type: application/pdf `n `n `n\"


}

}

[/code:1]

j'ai pas encore trop cherché pour comparer les dates mais je suis preneur pour tout commentaire.

merci beaucoup<br><br>Message édité par: farid, à: 17/01/17 16:15

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

Plus d'informations
il y a 9 ans 4 mois #22900 par hays
Bonjour,

finalement j'ai réglé le premier problème c'était trop simple en fait j'ai honte d'avoir demandé

[code:1]$tags= $item_source.Directory
$tagstitle= $tags.BaseName[/code:1]

il me reste le second problème, je ne sais pas trop comme je dois m'y prendre pour comparer les deux date lastWritetime...

:)

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

Plus d'informations
il y a 9 ans 4 mois #22938 par hays
Bonjour,

voici ce que je fais pour comparer les dates en écritures de deux fichier

[code:1]
$dateItemSource= (Get-Item $item_source.FullName).Get_LastWriteTime() 2&gt;1

$dateItemdest= (Get-Item $filetest).Get_LastWriteTime() 2&gt;1
trap [System.Management.Automation.RuntimeException] { 'le fichier exite il sera créé'}
$dateCompare= $dateItemSource.CompareTo($dateItemdest) 2&gt;1


avec plus bas

if ((test-Path \&quot;$filetest\&quot;«») -AND ($dateCompare -eq -1)) {
write-host \&quot;le fichier \&quot;$titre_element \&quot;le fichier existant est à la date du \&quot;$dateItemdest\&quot; \&quot;
}
else {[/code:1]

seulement étant données que dans ma premiere boucle je crais un fichier tid en fonction d'un fichier txt, le fameux fichier tid n'exite pas à
la premier itération de la boucle et me renvoi cette erreur:

[code:1]Impossible d’appeler une méthode dans une expression Null.
Au caractère C:\Users\user\Google Drive \FICHIERS_DE_REFERENCES\ref_win\ps1\ref_pshell\tp_script_dl\1portv2.ps1:46 : 9
+ $dateItemdest= (Get-Item $filetest).Get_LastWriteTime() 2&gt;1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation : (:«») [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull[/code:1]

si quelqu'un passe par la et que vous avez une astuce pour contourner ce soucis.<br><br>Message édité par: n3m0, à: 17/01/17 17:36

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

Plus d'informations
il y a 9 ans 4 mois #22939 par Guillaume
Bonjour,

Comme ça je dirais qu'il faudrait créer une condition qui lui dirait d'effectuer ton action seulement si ton fichier \&quot;.tid\&quot; existe.

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

Plus d'informations
il y a 9 ans 4 mois #22942 par hays
Bonjour,

effectivement c'était mon idée de départ mais il faut que je crée mon fichier tid.

je sais pas comment je dois m'y prendre....:unsure:

j'arrive pas trop à avoir un truc clair en tête

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

Plus d'informations
il y a 9 ans 4 mois #22946 par hays
En fait de tête je m'embrouillais et sur le papier vous aviez raison ça marche trés bien

j'ai juste ajouté ça

[code:1] if (test-Path \&quot;$filetest\&quot;«») {
$dateItemSource= (Get-Item $item_source.FullName).Get_LastWriteTime() 2&gt;1
$dateItemdest= (Get-Item $filetest).Get_LastWriteTime() 2&gt;1
#trap [System.Management.Automation.RuntimeException] { 'le fichier exite il sera créé'}
$dateCompare= $dateItemSource.CompareTo($dateItemdest) 2&gt;1
}[/code:1]

merci Guillaume_F

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

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