49 votes

Comment installer une police de caractères à partir de l'invite de commande Windows ?

Est-il possible d'installer des polices à partir de l'invite de commande sous Windows ? Si oui, quelle est la commande ?

Intenté copy [fontname].ttf C:\Windows\Fonts\ et il a indiqué que la copie était terminée, mais je n'ai pas pu trouver les polices en question dans le dossier Fonts ni dans la liste des polices de n'importe quel programme, de sorte que cela n'a certainement pas fonctionné. (Bien que j'aie était de supprimer ces polices du dossier Fonts par la suite)

35voto

GeneQ Points 4857

C'est possible, mais il faut écrire un Shell Shell de Windows pour le faire. La copie seule n'installera pas la police : vous devez également enregistrer la police, par ex.

copy "FontName.ttf" "%WINDIR%\Fonts"
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v "FontName (TrueType)" /t REG_SZ /d FontName.ttf /f

Vous pouvez également adapter les lignes de code suivantes à vos besoins, les enregistrer dans un fichier .vbs et les exécuter.

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace("<Folder or Share Location>")
Set objFolderItem = objFolder.ParseName("<TTF File Name>")
objFolderItem.InvokeVerb("Install")

Exemple :

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace("C:\Windows\Font")
Set objFolderItem = objFolder.ParseName("Myriad Pro.ttf")
objFolderItem.InvokeVerb("Install")

Une autre solution consiste à installer des polices "temporaires", uniquement pour la session de l'utilisateur actuel. L'idée est de lancer fontview.exe pour chaque police, ce qui la rend disponible pour d'autres applications Windows :

for /F "delims=;" %%a in ('dir C:\ExtraFonts /B /A-D-H-S /S') do fontview %%a

Voir la solution complète aquí .

23voto

Mathew Byrne Points 1083

En Powershell, cela peut être aussi simple que :

$fonts = (New-Object -ComObject Shell.Application).Namespace(0x14)
dir fonts/*.ttf | %{ $fonts.CopyHere($_.fullname) }

7voto

ipek Points 141

Similaire à la solution de GeneQ, voici une version qui le fait pour tous les fichiers .ttf dans le répertoire de script :

Set ofso = CreateObject("Scripting.FileSystemObject")
SourceFolder = ofso.GetParentFolderName(Wscript.ScriptFullName)

Const FONTS = &H14&

Set objShell  = CreateObject("Shell.Application")
Set oSource   = objShell.Namespace(SourceFolder)
Set oWinFonts = objShell.Namespace(FONTS)

' Lame VBscript needs 4 f*ing lines instead of "if (/\.ttf$/i) " ...
Set rxTTF = New RegExp
rxTTF.IgnoreCase = True
rxTTF.Pattern = "\.ttf$"

FOR EACH FontFile IN oSource.Items()
    IF rxTTF.Test(FontFile.Path) THEN   
        oWinFonts.CopyHere FontFile.Path
    END IF
NEXT

5voto

afrazier Points 22479

Vous pouvez également utiliser la fonction FontReg pour installer des polices à partir d'une invite de commande.

2voto

Desktop Masters Points 21

Créez un fichier script appelé InstallFonts.vbs dans mon cas je l'ai mis dans C:\PortableApps\InstallFonts\ Dans le code ci-dessous, remplacez "SomeUser" par le nom d'utilisateur de la personne que vous souhaitez voir installer des polices. Ensuite, créez le dossier "install Fonts" approprié sur son bureau.

Set ofso = CreateObject("Scripting.FileSystemObject")
'SourceFolder = ofso.GetParentFolderName(Wscript.ScriptFullName)
SourceFolder = "C:\Users\SomeUser\Desktop\Install Fonts"

Const FONTS = &H14&

Set objShell  = CreateObject("Shell.Application")
Set oSource   = objShell.Namespace(SourceFolder)
Set oWinFonts = objShell.Namespace(FONTS)

' Lame VBscript needs 4 f*ing lines instead of "if (/\.ttf$/i) " ...
Set rxTTF = New RegExp
rxTTF.IgnoreCase = True
rxTTF.Pattern = "\.ttf$"

FOR EACH FontFile IN oSource.Items()
    IF rxTTF.Test(FontFile.Path) THEN   
        oWinFonts.CopyHere FontFile.Path
    END IF
NEXT

Créez maintenant un raccourci sur leur bureau comme suit...

C:\Windows\System32\runas.exe /user:Administrator /savecred "wscript C:\PortableApps\InstallFonts\InstallFonts.vbs"

Notez que j'ai utilisé "Administrateur". Je l'ai activé et lui ai attribué un mot de passe. Je suppose que vous pouvez utiliser n'importe quel compte d'administrateur pour cela. La première fois que vous exécutez le raccourci, le mot de passe de l'administrateur vous est demandé. Chaque fois que vous le ferez par la suite, le raccourci fonctionnera.

S'il ne vous demande pas de mot de passe, exécutez le raccourci à partir d'une invite cmd et vous devriez être invité à le faire.

Je ne peux pas vous promettre que ce système est sûr, c'est-à-dire qu'ils pourraient l'utiliser pour exécuter un code élevé. Il s'agit toutefois d'une solution.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X