Es liegt daran, dass du SUBST mit dem
Parameter '> "I:\output.txt"' aufrufst. Da Subst diesen Parameter nicht kennt, passiert auch nix. Ein-/Ausgabeumleitungen sind ein Feature von cmd.exe.
Deshalb empfehle Ich:
ShellExecute(Handle, 'open', 'C:\Windows\System32\cmd.exe', '/c "subst > I:\output.txt"', nil, SW_SHOW);