The Unix command line tools were made for this sort of thing. You don't necessarily need full syntax parsing if regexes can be made to fit your specific needs. If you can't get what you need using in-editor replacement as @Paebbels suggested then consider using Gnu sed. It is easiest to get on Windows by installing Cygwin or you can install one of the Msys ports.
Gnu sed has an extension that will uppercase a matched pattern and another that will in-place edit a file.
After matching the start of a port this script loops until no substitutions are made which indicates the end of the port:
# Capitalize formals in a port interface list
sed -i -e "/port *(/ {s/[^(;:]*:/\U&/g;: pdef;n;s/[^;:]*:/\U&/g;t pdef}" *.vhdl
This doesn't handle blank or comment lines in the port but additional match rules can be inserted to force a no-change substitution on them so that the loop doesn't terminate early.
If you want to capitalize the formals in an association list use the following:
sed -i -e "s/[[:alnum:]_]* *=>/\U&/g" *.vhdl
This will work for the most common case where the formal isn't wrapped in a function call.
If you need to capitalize all other places where these port names are used then you can produce a script that dumps out all the port formals as a new sed script. Then use that generated script to capitalize any word that matches.
sed -n -e "/port *(/ {s/[^(;:]*:/\U&/gp;: pdef;n;s/[^;:]*:/\U&/gp;t pdef}" foo.vhdl | \
sed -n -e "s/\([(,;]\)/\1\n/gp" | \
sed -n -e "s/ *\([[:alnum:]_]*\) *[:,].*/\1/p" | \
sed -e "s%\(.*\)%s/\1/\U\1\L/gi%" > foo_uc.sed
sed -i -f foo_uc.sed foo.vhdl