I had a similiar issue. I had a CMD file that would setup my login & pwd based on params, then CD, then run SqlPlus. When I ran the CMD file, I would get the "Message file sp1 lang .msb not found" error, but if I manually executed the same line the CMD file was using to launch SqlPlus, everything worked great. The CMD was using an environment var to specify the full path of the SqlPlus executable. What I discovered is that the SqlPlus.exe executable didn't like the fact that I was using an environment variable called "SQLPLUS":
... do some stuff...
%SQLPLUS% %OPTIONS% %UID%@%SID%
As it turns out, the name "SQLPLUS" (along with about 6 billion other names) is a special / sacred environment variable name for Oracle... I took out the SQLPLUS env var and the CMD file worked.
I had installed an earlier version of Oracle client which had an environment variable set in the system variables in the environment variable dialog available from the Advances tab in the system properties dialog. During the install of 10 this got unset. I didn't notice it was still there and unset and I set a new one as a user variable. After I deleted the unset one which was overriding my user one I was in the clear.
Note that even in my cygwin shell, the user set variable was correct, but the unset version was causing the issue.