PDA

Ver la Versión Completa : ShellExecute para ejecutar comando que contiene '>'


mlara
10-03-2007, 20:02:13
Veamos esto...

ShellExecute(Handle, nil, PChar('G:\Mostrar_Num.bat > G:\Num.txt'), nil, nil, SW_SHOWNORMAL);


El archivo Mostrar_Num.bat es un archivo por lotes que muestra un número (a manera de ejemplo). Así la línea que contiene el archivo Mostrar_Num.bat es:

@echo 8

Al ejecutar en la línea de comandos del sistema la línea:

G:\>Mostrar_Num.bat > Num.txt

Se crea el archivo 'Num.txt' y en el se consigna el número 8. Pero cuando ejecuto la instrucción ShellExecute, no pasa nada, y la función no genera ningún error.

La pregunta entonces sería la siguiente: ¿De qué otra manera se puede ejecutar esa línea desde Delphi de tal manera que funcione?

seoane
10-03-2007, 21:47:32
La respuesta corta:
Usa el truco 54 (http://www.clubdelphi.com/trucos/index.php?id=54). Este permite ejecutar la linea de comandos tal cual tu la tienes, o incluso, permite capturar directamente la salida del programa sin tener que utilizar un archivo de texto.

La respuesta larga:
Tu codigo no funciona porque en la funcion Shellexecute, el programa a ejecutar y los parametros tienen que pasarse por separado. Es decir:

ShellExecute(Handle,nil,PChar('G:\Mostrar_Num.bat'),PChar('> G:\Num.txt'),nil,SW_SHOW);

Pero aun asi no funcionaria como tu esperas, ya que la redireccion ">" es un parametro manejado por el interprete de comandos. Asi que lo que debemos ejecutar es el interprete de comandos, y pasarle toda la linea como parametro. Algo Asi:

ShellExecute(Handle,nil,PChar('cmd.exe'),PChar('/c G:\Mostrar_Num.bat > G:\Num.txt'),nil,SW_SHOW);

Y aun asi, tendríamos que resolver el problema de que el interprete de comandos no se llama siempre igual en todos los windows, tendríamos que obtener su nombre de la variable de entorno COMSPEC.

En fin, mejor usar el truco 54 (http://www.clubdelphi.com/trucos/index.php?id=54) :D

mlara
11-03-2007, 00:23:52
Vaya, qué me estará pasando? La solución es lógica! je je :D.

No esperaría una respuesta mejor, ni más rápida. Gracias seoane.

Voy a probar las dos soluciones, para dos aplicaciones diferentes. En realidad en una de ellas requiero del archivo de texto, pero en la otra quizás no, así que el truco 54 en este caso será una alternativa excelente.

lacovera
25-03-2007, 23:06:25
hola!! estoy intentando llamar a un programa externo desde delphi 2006 con ShellExecute y no me lo reconoce (undeclarated identifier ShellExecute)
hay que agregar algo a mi proyecto para poder utilizarlo?? :confused:

Muchas gracias!!

seoane
25-03-2007, 23:08:52
hay que agregar algo a mi proyecto para poder utilizarlo?? :confused:



uses ShellApi;

lacovera
26-03-2007, 01:25:28
Muchas gracias :o