Как установить шрифт из командной строки Windows?

37

Можно ли установить шрифты из командной строки в Windows? Если да, то какая команда?

Я попытался, copy [fontname].ttf C:\Windows\Fonts\и он сказал, что копирование завершено, но я не смог ни найти указанные шрифты в папке Fonts, ни найти их в списке шрифтов какой-либо программы, так что это точно не сработало. (Хотя я был в состоянии удалить указанные шрифты из шрифтов папки впоследствии)

Mussnoon
источник
Связанный: stackoverflow.com/questions/28687666/…
Джерри Додж

Ответы:

31

Это возможно, но для этого нужно написать сценарий оболочки Windows. Копирование само по себе не приведет к установке шрифта: вам также необходимо зарегистрировать шрифт, например:

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

В качестве альтернативы вы можете использовать следующие строки кода в соответствии с вашими потребностями; сохраните его как файл .vbs и затем выполните его.

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

Пример:

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

Еще одна альтернатива - установить шрифты «временно», просто для текущего сеанса пользователя. Идея состоит в том, чтобы запустить fontview.exeдля каждого шрифта, что делает его доступным для других приложений Windows:

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

Смотрите полное решение здесь .

GeneQ
источник
Будете ли вы так любезны распространить свой скрипт на: (1) Автоматическую установку всех шрифтов *.ttfи *.fonшрифтов из текущего каталога (2) Используйте, Const FONTS = &H14&как предлагается здесь ( sevenforums.com/general-discussion/… ). Я не король на VBS :( Заранее спасибо.
dma_k
1
objFolderItem.InvokeVerb("Install")не работает на Windows Server 2012 R2
Энтони Конг
@GeneQ: copyи reg addне делает шрифт, перечисленный в программах в Windows® 10.
user2284570
16

В Powershell это может быть так просто:

$fonts = (New-Object -ComObject Shell.Application).Namespace(0x14)
dir fonts/*.ttf | %{ $fonts.CopyHere($_.fullname) }
Guss
источник
3
Я бы поменял вторую строчку наGet-ChildItem -Recurse -include *.ttf | % { $fonts.CopyHere($_.fullname) }
Евгений Шарапов
2
Конечно, Get-ChildItemэто способ Powershell, я просто ненавижу способ Powershell (здесь речь идет о оболочке Unix), и dirэто просто псевдоним для этого; и если вы хотите рекурсию, то варианты, которые вы предоставили, - путь. Для простого «просто отсканируйте файлы в этой папке» моя версия менее многословна и более читабельна.
Guss
5

Аналогично решению GeneQ, вот версия, которая делает это для всех файлов .ttf в каталоге скрипта:

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
mivk
источник
Вы только что сохранили мой день :) Мой шрифт Windows по умолчанию поврежден, и это был единственный способ переустановить все шрифты Windows по умолчанию. Благодарность!!
Рима
идеальный! Я использовал это в VBS, управляемом файлом bat для нескольких компьютеров после ребрендинга компании. Он устанавливает шрифты, устанавливает файлы подписи электронной почты для Outlook и устанавливает домашнюю страницу браузера
Рис
3

Вы также можете использовать утилиту FontReg для установки шрифтов из командной строки.

afrazier
источник
1
Это не сработало для меня в Windows 10 64bit.
Джангофан
1
@djangofan: Вы использовали командную строку с повышенными правами? Я еще не пробовал fontreg на Windows 10, но я ожидаю, что это потребуется.
afrazier
Проблема заключалась в том, что я пытался установить шрифты Mac в моей системе (у них нет расширений имени файла). Я получил файлы шрифтов Windows .TTF, и теперь все хорошо.
Джангофан
1

Создайте файл сценария с именем InstallFonts.vbs. В моем случае я поместил его в C: \ PortableApps \ InstallFonts \ IN. В приведенном ниже коде замените «SomeUser» именем пользователя, которому вы хотите установить шрифты. Затем создайте соответствующую папку «Install Fonts» на своем рабочем столе.

    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

Теперь создайте ярлык на рабочем столе, который выглядит следующим образом ...

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

Обратите внимание, что я использовал «Администратор». Я включил его и назначил пароль. Я полагаю, вы можете использовать любую учетную запись администратора для этого. При первом запуске ярлыка вам будет предложено ввести пароль администратора .. каждый раз после того, как он будет работать.

Если он не запрашивает пароль, запустите ярлык из командной строки cmd.

Я не могу пообещать вам, насколько это безопасно, если бы они могли использовать его для запуска повышенного кода. Однако это решение.

Настольные Мастера
источник
0

Как сказал ранее GeneQ, это то, как вы продолжаете (я проверял это)

  1. Откройте командную строку с правами администратора
  2. Используйте команду:

for / F "delims =;" % a in ('dir C: \ FontsDir / B / ADHS / S') сделать просмотр шрифта% a

Где C: \ FontsDir - это каталог, в котором хранятся ваши tff-файлы. После того, как выполненные окна "fontview" будут открыты, столько же, сколько и файлов tff в каталоге "FontsDir". Вы просто должны нажать на кнопку «Установить», и вот вы здесь! ваши шрифты установлены в вашей системе

Надеюсь, это поможет кому-то

Сэм Докси
источник
почему такая сложная forкоманда вместо (например) for %a in (C:\FontsDir\*.*) do fontview "%a"?
Эль
Команда показывает также скрытые шрифты
Сэм Докси
-1

Вы не указали свою версию Windows, но я предполагаю, что вы работаете в Vista или 7. Для копирования в этот каталог требуются права администратора. Попробуйте то, что вы сделали снова, но на этот раз используйте повышенную командную строку.

jsejcksn
источник
3
Он сказал, что копия удалась. Если бы разрешения мешали ему успешно копировать туда, он бы сказал, что копирование не удалось, так что, вероятно, это не проблема.
nhinkle
-1

Я потратил много времени, чтобы найти способ установки шрифта без перезагрузки. Наконец я нашел это: ClickFont . Это простое и точное решение.

ClickFont позволяет легко устанавливать шрифты TrueType, OpenType и PostScript всего двумя щелчками мыши из любой точки системы. Все, что для этого нужно - щелкнуть правой кнопкой мыши шрифт или папку.

SelçukDERE
источник