Question Pb de caractères accentués avec Evernote

Plus d'informations
il y a 1 an 2 mois #29210 par Jose Hidalgo
Bonjour à tous,

J'ai trouvé récemment un script PowerShell assez simple permettant de sauvegarder localement tous les carnets de notes Evernote. Le voici :

[code:1]# Simple Evernote backup PowerShell Script
#
# Backs up all notebooks in your account as .enex files, located in a designated
# directory. The backup directory name is generated by a base name with the
# current date appended.
#
# Todo:
# * Specify backup directory base via command-line
# * Backup single notebook specified via command-line
# * Restore notebook

# You may need to modify this according to the location of ENScript.exe
$ENscript = \"C:\Program Files (x86)\Evernote\Evernote\ENScript.exe\"

# Modify backup directory base as desired
$BackupLocation = \"D:\Backups\Evernote\\"

# Write out notebook names to a temporary file, one line at a time
$tempfile = \"notebooks.txt\"
& $ENscript listNotebooks >$tempfile
$reader = [System.IO.File]::OpenText($tempfile)

# Create a backup directory for this date
# Get current date and append it to the backup directory base
$date = get-date -uformat \"%Y-%m-%d\"
$BackupDir = $BackupLocation + \"Backup \" + $date
# Make the actual backup directory
if ( ! (Test-Path $BackupDir) )
{
md $BackupDir
}

# Process notebook names
try
{
for( ; ; )
{
# fetch a notebook name
$name = $reader.ReadLine()
if ($name -eq $null) { break }

# write out the backup file for this notebook: <notebook name>.enex
\"Backing up \" + $name + \"...\"
$BackupFileName = $BackupDir + \"\\" + $name + \".enex\"
& $ENscript exportNotes /q \"notebook:$name\" /f $BackupFileName
}
# Show your work
dir $BackupDir
}
finally
{
$reader.Close()
}
# delete the temp file
remove-item $tempfile[/code:1]

Malheureusement ce script ne fonctionne pas avec les carnets de notes ayant des caractères accentués dans leur titre. Donc si j'ai par exemple 50 carnets de notes mais que 17 ont des caractères accentués dans le nom, seulement 33 seront sauvegardés au final.

Le problème (ou ses effets) se voit dans la variable $name, puisque lors de l'exécution du script, dans la console on voit que cette variable s'affiche incorrectement. Du coup les fichiers correspondants ne peuvent pas être sauvegardés.

L'auteur du script ne sait pas comment le débugger. Pourriez-vous m'aider SVP ? Merci d'avance ! ;)

PS : j'ai PowerShell 5.1 sous Win 7 SP1 x64

Message édité par: Jose Hidalgo, à: 22/08/19 13:24

Message édité par: Jose Hidalgo, à: 22/08/19 13:26

Message édité par: Jose Hidalgo, à: 22/08/19 13:27<br><br>Message édité par: Jose Hidalgo, à: 22/08/19 13:31

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

Plus d'informations
il y a 1 an 2 mois #29211 par Whitatrax
Bonjour,

Serait-il possible de nous donner l'erreur que tu rencontres s'il y en a une ?

essaie de voir autour de cette ligne de commande

[code:1]
$file = [regex]::Escape(\&quot;ton nom de fichier avec accents\&quot;«»)
&lt;ta ligne de commande qui utilise $file&gt;
[/code:1]

Whitatrax

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

Plus d'informations
il y a 1 an 2 mois #29212 par Laurent Dardenne
Salut,
le programme ENScript.exe fonctionne si tu l'exécutes dans une console (CMD avec un nom de fichier accentué ?

Il se peut que tu ais un problème d'encodage/décodage. Essaie get-content au lieu de [System.IO.File]::OpenText.

Tutoriels PowerShell

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

Plus d'informations
il y a 1 an 1 mois #29213 par Jose Hidalgo
Merci pour vos réponses. Voici une capture d'écran de la console en cours de script :

Fichier attaché :


Les caractères accentués sont bien remplacés par des symboles, mais aucune erreur n'apparaît. Le script essaye ensuite d'écrire ces fichiers avec des symboles dans leur nom, et j'imagine que windows doit refuser.

Je peux faire tous les tests que vous voudrez, mais je suis débutant en PowerShell, donc SVP indiquez-moi précisément quoi changer dans le script. Merci encore. :)<br><br>Message édité par: Jose Hidalgo, à: 22/08/19 15:48

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

Plus d'informations
il y a 1 an 1 mois #29214 par Jose Hidalgo
J'ai inséré une pause juste après la ligne \&quot;$reader = [System.IO.File]::OpenText($tempfile)\&quot;, ce qui m'a permis d'examiner le fichier temporaire notebooks.txt.

En effet ce fichier contient des noms déjà corrompus :
Facebook
Hi-Fi &amp; Hi-Tech
Mod&amp;#9500;¿les de notes
Carnet principal
D&amp;#9500;®m&amp;#9500;®nagement
Perso
Brouillons
Informatique
Appartements
Comp&amp;#9500;®titions
Cuisine
DIVERS
Sant&amp;#9500;®

Il faudrait donc changer l'encodage de façon à ce que le fichier temporaire soit créé avec les bons caractères.

Alternativement, je pourrais vivre aussi avec une commande supplémentaire qui remplacerait les caractères dans le fichier temporaire juste après sa création :
&amp;#9500;¿ remplacé par è
&amp;#9500;® remplacé par é
Etc.

Merci d'avance.

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

Plus d'informations
il y a 1 an 1 mois #29215 par Laurent Dardenne
Jose Hidalgo écrit:

Il faudrait donc changer l'encodage de façon à ce que le fichier temporaire soit créé avec les bons caractères.

Je ne sais pas \&quot;s'il faut\&quot; ,mais de tester est un bon début :)
Dans ton cas, ne pouvant tester, il reste à déterminer si c'est l'écrivain ou le lecteur qui utilise un encodage particulier :
[code:1]
#Ecrivain
&amp; $ENscript listNotebooks &gt;$tempfile

#lecteur
$reader = [System.IO.File]::OpenText($tempfile)
[/code:1]
Peut-être une piste en vérifiant l'encodage de $tempfile dans notepad. Si je me souviens bien, son menu 'Enregister sous' affiche par défaut l'encodage actuel du fichier.<br><br>Message édité par: Laurent Dardenne, à: 22/08/19 18:15

Tutoriels PowerShell

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

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