The caret (^) acts as a escape character when using DOS special characters. I couldn't find much documentation on
why you need it, just that without it under certain conditons the parser will error out.
Apparently you need to use it when a DOS special symbol is used in a nested command.
In the example I gave you:
for /f "tokens=3" %%i in ('dir c: ^| find /i "free"') do echo %%i, the pipe (|) is embedded in the FOR command.
I know, I know, not much of a response, but use it if you get an error by not using it.