on 2010 Sep 21 10:22 AM
[A follow-up from Breck's comment on this question..., all tested with SA 12.0.0.2566.]
In a CMD prompt, a simple call to DBTRAN a log file
"%SQLANY12%\\bin32\\dbtran" C:\\abc.log > C:\\test.txt 2> C:\\test.err
works as expected - i.e. test.txt contains the output and test.err the (here expected) error that abc.log doesn't exist (in my case).
The corresponding xp_cmdshell call shows that environment variables like SQLANY12 are recognized:
xp_cmdshell('"%SQLANY12%\\bin32\\dbtran" C:\\abc.log > C:\\test.txt 2> C:\\test.err')
seems to replace the environment variable with the correct value. However, it does not seem to handle spaces in pathes correctly, as test.err txt contains the following error (translated from German):
The command "C:\\Programme\\Sybase\\SQL" ... could not be found.
Note, the %SQLANY12% value contains spaces, and so I put double quotes around the path specification. This works in the CMD box but not in xp_cmdshell, no matter if I use double quotes or doubled single quotes around the path.
In contrast, the corresponding call with the expanded path works as expected:
xp_cmdshell('"C:\\Programme\\Sybase\\SQL Anywhere 12\\bin32\\dbtran" abc.log > C:\\test.txt 2> C:\\test.err')
Question:
So how can environmnent variables with pathes including spaces be handled correctly?
Are you using a shell replacement such as TCC or 4nt? Verify that COMSPEC is set to the cmd.exe that comes with Windows. Internally, xp_cmdshell will use %COMSPEC% or cmd.exe if COMSPEC is not set and build the following command line:
%COMSPEC% /c user_cmdline
and then passes it to CreateProcess.
When I have comspec set to use TCC, I get the error you reported but when it is set to cmd.exe it works correctly.
-john.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
73 | |
10 | |
8 | |
7 | |
7 | |
6 | |
6 | |
6 | |
6 | |
6 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.