How do I install a font from the Windows command prompt?

143,609

Solution 1

It's possible but you have to write a Windows shell script to do that. Copying alone won't install the font: you also need to register the font, e.g.

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

Alternatively you can the following lines of code to suit your needs; save it as a .vbs file and then execute it.

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

Example:

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

Yet another alternative is to install fonts "temporary", just for current user session. The idea is to run fontview.exe for each font, which makes it available for other Windows applications:

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

See the complete solution here.

Solution 2

In Powershell this can be as simple as:

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

Solution 3

Similar to GeneQ's solution, here is a version doing it for all .ttf files in the script's directory:

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

Solution 4

You can also use the FontReg utility to install fonts from a command prompt.

Solution 5

Create a script file called InstallFonts.vbs in my case I put it in C:\PortableApps\InstallFonts\ IN the below code replace "SomeUser" with the username of the person you want to be able to install fonts. Then make the Appropriate "install Fonts" folder on their desktop.

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

Now create a shortcut on their desktop that is as follows...

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

Note that I used "Administrator". I enabled it and assigned it a password. I suppose you could use any administrator account for this. First time you run the shortcut you will be prompted for the administrator password. Every time after it will just work.

If it does not prompt you for a password run the shortcut from a cmd prompt it should prompt you then.

I cannot promise you how secure this is as in if they could use it to run elevated code. However it is a solution.

Share:
143,609

Related videos on Youtube

Mussnoon
Author by

Mussnoon

Updated on September 17, 2022

Comments

  • Mussnoon
    Mussnoon over 1 year

    Is it possible to install fonts from the command prompt on Windows? If yes, what is the command?

    I tried copy [fontname].ttf C:\Windows\Fonts\ and it said copying was complete, but I could neither find the said fonts in the Fonts folder nor find them in the font list of any program so that certainly didn't work. (Although I was able to delete the said fonts from the Fonts folder afterwards)

    • Jerry Dodge
      Jerry Dodge about 9 years
    • Trilok M
      Trilok M almost 4 years
      Hi @Mussnoon I'm also facing this issue of fonts not getting installed. Wanted to check if you were able to install the fonts from command line. Thanks.
  • nhinkle
    nhinkle over 13 years
    He said that the copy succeeded. If permissions were preventing him from successfully copying there, it would have told him that the copy failed, so this probably isn't the problem.
  • dma_k
    dma_k over 12 years
    Will you be so kind to extend your script to: (1) Automatically install all *.ttf and *.fon fonts from current directory (2) Use Const FONTS = &H14& as suggested here (sevenforums.com/general-discussion/…). I am not king on VBS :( Thanks in advance.
  • Anthony Kong
    Anthony Kong over 9 years
    objFolderItem.InvokeVerb("Install") does not work on Windows Server 2012 R2
  • Olivier.Roger
    Olivier.Roger over 8 years
    This didn't work for me on Windows 10 64bit.
  • afrazier
    afrazier over 8 years
    @djangofan: Were you using an elevated command prompt? I haven't tried fontreg on Windows 10 yet, but I'd expect that to be required.
  • Olivier.Roger
    Olivier.Roger over 8 years
    The problem was I was trying to install Mac fonts on my system (they don't have filename extensions). I got the windows .ttf font files and its all good now.
  • Rima
    Rima over 8 years
    You just saved my day :) My default Windows font got corrupted and this was the only way I could reinstall all Windows Default fonts. Thanks!!
  • Reece
    Reece over 8 years
    perfect! I used this in a vbs run by a bat file for a number of computers after a company re-brand. It installs the fonts, installs the email signature files for Outlook and sets the browser home page
  • Ale
    Ale over 8 years
    why such a complex for command instead of (for example) for %a in (C:\FontsDir\*.*) do fontview "%a"?
  • Sam Doxy
    Sam Doxy about 8 years
    The command shows also hidden fonts
  • user2284570
    user2284570 almost 8 years
    @GeneQ : Thecopyandreg adddoesn’t makes the font listed in programs in Windows® 10.
  • EvgeniySharapov
    EvgeniySharapov over 7 years
    I would change second line with Get-ChildItem -Recurse -include *.ttf | % { $fonts.CopyHere($_.fullname) }
  • Simon Melhuish
    Simon Melhuish over 7 years
    Granted, Get-ChildItem is the Powershell way, I just hate the Powershell way (Unix shell affectionado here), and dir is just an alias for that; and if you want recursion, then the options you provided are the way to go. For the simple "just scan the files in this folder", my version is less verbose and more readable.
  • cjones26
    cjones26 over 3 years
    This answer was the easiest for me, and worked the best. Thank you!
  • zx485
    zx485 almost 3 years
    Adding the commands to add the new fonts to the Windows Registry would seriously improve your answer.