You could do so with FontForge’s scripting - I used to use that to post-fix fonts coming out of BitFontMaker2. Here’s an example:
ff_uppercase.bat
@echo off
if "%1" == "" goto help
if "%2" == "" goto help
fontforge -quiet -script %~dp0ff_uppercase.pe %1 %2
goto end
:help
echo Usage: ff_uppercase in.ttf out.ttf
:end
ff_uppercase.pe
Open($argv[1]);
//
name = $1:r;
p1 = Strrstr(name, "/");
p2 = Strrstr(name, Chr(92));
if (p1 < p2)
p1 = p2;
endif
if (p1 >= 0)
name = Strsub(name, p1 + 1)
endif
name = name + ".uc";
SetFontNames(name, name, name);
//
n = CharCnt();
//
replaceable = Array(n);
i = 32;
while (i < n)
replaceable[i] = 1;
++i;
endloop
replaced = 0;
//
i = 32;
while (i < n)
if (IsUpper(i) && WorthOutputting(i))
Select(i);
Copy();
lower = ToLower(i);
if (replaceable[lower])
replaced++;
replaceable[lower] = 0;
Select(lower);
Clear();
Paste();
endif
endif
++i;
endloop
Print("Replaced " + ToString(replaced) + " glyphs.");
Generate($argv[2]);
The Python API is probably easier to work with.