Problema con xp_cmdshell y las "

22/12/2004 - 11:28 por Salvador Ramos | Informe spam
Hola a todos:

Tengo el siguiente mandato, para compactar una base de datos Access, que
funciona perfectamente desde línea de comandos.
"C:\Archivos de programa\Microsoft Office\OFFICE11\msaccess"
"F:\Andamur\Tmp Importacion\Extranet\ExAndamur.mdb" /compact

Ahora quiero ejecutarlo con xp_cmdshell, y me da error. Sé que el problema
lo tengo en las comillas dobles, pero no logro dar con la solución (no puedo
quitar las comillas dobles porque la ruta contiene espacios).

Podeis indicarme cómo hacerlo ?

master..xp_cmdshell ' "C:\Archivos de programa\Microsoft
Office\OFFICE11\msaccess" "F:\Andamur\Tmp
Importacion\Extranet\ExAndamur.mdb" /compact '

No funciona, me indica que
"C:\Archivos" no se reconoce como un comando externo o externo.
Efectivamente ese no es el comando, ya que lo está truncando por el primer
espacio en blanco que encuentra.

También he intentado hacer un bat y ponerlo en una ruta sin espacios, y
tampoco funciona (en cambio si ejecuto el bat desde el explorador de windows
si que funciona):
xp_cmshell 'F:\Andamur\CompactarExAndamur.bat'
En este caso lo estoy probando desde el query analyzer y se me queda el
proceso ejecutandose infefinidamente.

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?
 

Leer las respuestas

#1 qwalgrande
22/12/2004 - 12:29 | Informe spam
Hola.

Lo primero, disculparme ante las estupideces que mi humilde persona pueda
decirle a un MVP de SQL Server y que para lo único que servirán será para
poner de manifiesto mi ignorancia. En cualquier caso, he probado a realizar
algo parecido a lo que comentas,

exec xp_cmdshell '"C:\Program Files\calc"'

Funciona "perfectamente", es decir, me aparece un proceso calc.exe en el
Task Manager, aunque no veo la calculadora. Y hasta que no mato dicha tarea,
el comando queda ejecutándose (la consulta no finaliza). Y salvo que en tu
caso hayas previsto que el access se cierre de alguna forma, la tarea, la
consulta que lanzas, no finalizará nunca.

Si no pongo las comillas dobles, no funciona ('C:\Program' is not recognized
as an internal or external command,...).

En cualquier caso, ejecutar aplicaciones así, siempre y cuando no esté
totalmente controlado, no sé yo si será la mejor de las ideas, ya que lanzar
una compactación de access puede quedarse colgada y desde sql server no habrá
luego forma de finalizar el proceso, habrá que ir al Task Manager a matarla.

Yo uso habitualmente una compresión usando gzip desde xp_cmdshell y obtengo
resultados satisfactorios. Sin embargo, en el pasado he tenido que lanzar
otras aplicaciones menos simples por métodos parecidos y tarde o temprano
acaban por quedarse pilladas. Y en ese caso puedes llegar a tener un
problema, en un par de ocasiones me vi forzado a reiniciar el servidor, ya
que no había forma de finalizar el proceso. Mi opinión es que si tienes
alguna otra forma de hacerlo, no uses xp_cmdshell, ni el servidor en general
para realizar esta tarea. Si no te queda más remedio, un dts, un job que
permiten lanzar el proceso windows sería mejor opción. xp_cmdshell como
último recurso.

qwalgrande

"Salvador Ramos" wrote:

Hola a todos:

Tengo el siguiente mandato, para compactar una base de datos Access, que
funciona perfectamente desde línea de comandos.
"C:\Archivos de programa\Microsoft Office\OFFICE11\msaccess"
"F:\Andamur\Tmp Importacion\Extranet\ExAndamur.mdb" /compact

Ahora quiero ejecutarlo con xp_cmdshell, y me da error. Sé que el problema
lo tengo en las comillas dobles, pero no logro dar con la solución (no puedo
quitar las comillas dobles porque la ruta contiene espacios).

Podeis indicarme cómo hacerlo ?

master..xp_cmdshell ' "C:\Archivos de programa\Microsoft
Office\OFFICE11\msaccess" "F:\Andamur\Tmp
Importacion\Extranet\ExAndamur.mdb" /compact '

No funciona, me indica que
"C:\Archivos" no se reconoce como un comando externo o externo.
Efectivamente ese no es el comando, ya que lo está truncando por el primer
espacio en blanco que encuentra.

También he intentado hacer un bat y ponerlo en una ruta sin espacios, y
tampoco funciona (en cambio si ejecuto el bat desde el explorador de windows
si que funciona):
xp_cmshell 'F:\Andamur\CompactarExAndamur.bat'
En este caso lo estoy probando desde el query analyzer y se me queda el
proceso ejecutandose infefinidamente.

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?



Preguntas similares