Diviser un fichier vCard en de multiples fichiers séparés avec Powershell

Les contacts de Gmail peuvent être exportés dans un fichier au format vCard pour une importation dans le carnet d’adresses Apple ou une autre application comme Outlook.

Le fichier produit s’intitule contacts.vcf. Il contient toutes vos adresses dans un seul fichier. Les adresses étant au format vCard, elles sont stockées dans le fichier sous la forme:
BEGIN:VCARD
VERSION:3.0
FN:Jean Dujardin
N:Dujardin;Jean;;;
EMAIL;TYPE=INTERNET:jean.dujardin@gmail.com
NOTE:Intelligence économique
END:VCARD

Chaque adresse est donc encadrée dans un bloc BEGIN:VCARD – END:VCARD.

Lorsque j’ai voulu importer ce fichier dans Microsoft Outlook 2013, celui-ci n’a lu que la première adresse. Pour contourner cette difficulté, j’ai trouvé sur le web un script en Windows PowerShell qui permet de lire un gros fichier pour générer des petits fichiers unitaires.

Le script de Paul Westlake a justement été écrit pour diviser un fichier vCard en de multiples fichiers séparés. Comme il correspondait parfaitement à mon besoin, je l’ai uniquement francisé.

Le script n’étant pas signé, pensez à modifier la préférence utilisateur de la stratégie d’exécution Windows PowerShell avec la commande Set-ExecutionPolicy.

Code actuel:
SplitVCF_V2_0_0.zip

Ancien code:
SplitVCF_V1_0_0.zip

2 réponses sur “Diviser un fichier vCard en de multiples fichiers séparés avec Powershell”

  1. maj pour avoir le traitement du dernier et le nom des contacts comme noms de fichiers:
    clear-host
    Write-Host Diviser un fichier vCard en de multiples fichiers séparés.
    $ifile = $args[0]
    If( $ifile -eq $NULL )
    {
    Write-Host Usage: .SplitVCF.ps1 nom-fichier-vcard.vcf
    Write-Host Exemple: .SplitVCF.ps1 c:contacts.vcf
    Exit
    }
    Write-Host Début du traitement du fichier vCard $ifile

    $i = 0
    $name = « premier »
    $FString = $false
    switch -regex -file $ifile
    {
    « ^BEGIN:VCARD » {if($FString){$FString |
    out-file -Encoding « ASCII » « $($name).vcf »;Write-Host « entrée trouvée $i $name »};$FString = $_;$i++}
    « ^FN: » {$FString+= »`r`n$_ »;Write-Host « fn pour $i » ;$name= $_.substring(3); $name = [System.Text.RegularExpressions.Regex]::Replace($name, »[^1-9a-zA-Z_] », »_ »)}
    default {$FString+= »`r`n$_ »}
    }
    if($FString){$FString | out-file -Encoding « ASCII » « $($name).vcf »;Write-Host « entrée trouvée $i »}
    Write-Host Fin du traitement du fichier vCard $ifile
    Write-Host $i vCard ont été traités.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *