Did you try:
Test.exe "%Temp%"
That may be enough to prevent the OS from expanding the environment variable.
Either that, or consider if you really need to pass the OS-specific form of the environment variable name. Without knowing any specifics of Test.exe perhaps you could just use:
Test.exe Temp
Then inside Test.exe you can simply retrieve the environment variable by name. I think this would be more in line with convention anyway.
Also (again, without more detail, it's hard to tell) it seems odd to pass in the name of an environment variable at runtime. Is the name of the variable dynamic? Could you put the name of the environment variable into one that's static, so that Test.exe can just retrieve the name from a consistently-named variable like "Test_exe_init"?
set Text_exe_init=Some_Dynamic_Variable_Name
Test.exe
And inside Text.exe it uses
string foo=GetEnvironmentVariable("Test_exe_init");
How do I get and set Environment variables in C#?
Just a thought...