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

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

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

13 ответов

Это возможно, но для этого нужно написать сценарий оболочки 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

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

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

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

Аналогично решению 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

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

Создайте файл сценария с именем 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.

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

Гасс и Евгений Шарапов действительно самый простой подход.

  1. Скачать шрифты
  2. Разархивировать файлы
  3. Откройте Powershell и перейдите в целевой каталог.
  4. Выполните код в целевом каталоге для рекурсивной установки шрифтов.
      $fonts = (New-Object -ComObject Shell.Application).Namespace(0x14)
Get-ChildItem -Recurse -include *.ttf | % { $fonts.CopyHere($_.fullname) }

Мы с коллегой нашли решение PowerShell, которое не требует прав администратора и не отображает никаких подсказок. Вы можете использовать имя файла шрифта для установки и удаления. Это делает его особенно полезным для сценариев.

Я разместил это в stackoverflow: https://stackoverflow.com/a/67903796/1635906

FontReg решил проблему для меня: http://code.kliu.org/misc/fontreg/

Командная строка: FontReg.exe /copy

Чтобы дополнить первый ответ для Windows 10, нужно скопировать шрифты вC:\Windows\Fontsа затем также добавьте в следующий раздел реестра Windows для КАЖДОГО имеющегося у вас шрифта.

      HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts
HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\Fonts

Бывший. Из первого ответа:

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

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

Только добавляя кHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fontsу меня не сработало.

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

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

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

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

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

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

Я решил задачу таким образом:

Предположим, вам нужно рекурсивно установить множество шрифтов в подпапки со следующей структурой:

      \root_folder
    Install_fonts.cmd
    \font_folder_1
        font_1.ttf
        font_2.otf
    \font_folder_2
        font_3.ttf
        font_4.otf
    \font_folder_3
        font_5.ttf
        font_6.otf

Для этого я загрузил на рабочий стол инструмент FontReg.exe (изменитеpathв файле, если он находится где-то еще), и я использовал его в пакетном скрипте, подобном следующему, расположенному в (измените также его имя в файле, если оно отличается):

      @echo off
set back=%cd%
for /d %%i in (%USERPROFILE%\Desktop\root_folder\*) do (
cd "%%i"
echo current directory:
cd
start /wait %USERPROFILE%\Desktop\fontreg-2.1.3-redist\bin.x86-64\FontReg.exe /move
timeout /t 1 /nobreak >nul
)
cd %back%
echo Process completed!
pause

Итак, вам придется бежатьInstall_fonts.cmdвroot_folderот имени администратора , чтобы автоматизировать процесс установки шрифтов.

Ваше здоровье

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

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

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

Другие вопросы по тегам