どういう状況で困るのか、よくわからないです。
C:\>type a.bat
@echo off
for %%a in (*.txt) do set X=%%a&call :sub
goto :eof
:sub
echo "%X%"
C:\>dir /b *.txt
%hoge%.txt
hage.txt
^%hoge^%.txt
C:\>a
"%hoge%.txt"
"hage.txt"
"^%hoge^%.txt"
---------- 以下、どうでもいいけどびっくりしたこと。
C:\>set a = b
C:\>echo %a %
b
C:\>set a b c = d e f
C:\>echo %a b c %
d e f