Página 1 de 1

[SOLUCIONADO] Ejecutar comando con Windows 7

Publicado: 19 Nov 2012, 19:31
por jesss
Hola,

Intento hacer crear un rar de la carpeta del escritorio desde Windows 7. Con el comando en XP no he tenido problemas, pero a la hora del Windows 7 me sale siempre el error:
"El sistema no puede encontrar la ruta especificada" cuando lo ejecuto con:
RunWait(@ComSpec&' /k '&$command_rar,"") para que se vea la pantalla de comandos.


$dir_backup='d:\temp\Backup';
$dir_origen1='%USERPROFILE%\Desktop';W7
$name_rar='backup.rar'
$espacio_max=50*1048576

$command_rar=' ""%ProgramFiles%\WinRAR\rar.exe"" a -ef -ed -ep1 -sl'&$espacio_max&'B -x*.lnk -x*.ini '&$dir_backup&'\'&$name_rar&' '&$dir_origen1&' '
RunWait(@ComSpec&' /k '&$command_rar,"")


Creo que es alguna cosa debido a las comillas simples y las dobles, según había visto en algún mensaje del foro, pero he estado probando combinaciones y no soy capaz de dar con la adecuada.

¿Alguien puede ser más específico para ver dónde me está fallando?

Gracias a todos.

Re: Ejecutar comando con Windows 7

Publicado: 20 Nov 2012, 12:35
por Ximorro
¿No será por doblar las comillas dobles en
$command_rar=' ""%ProgramFiles%\WinRAR\rar.exe"" a.....?

Debería ser
$command_rar=' "%ProgramFiles%\WinRAR\rar.exe" a...?

Se doblan las comillas si pones el string entre las mismas comillas. Por ejemplo
$a = "Esto ""está"" entre comillas"

Pero si se usan simples no hace falta, eso es lo bueno:
$a = 'Esto "está" entre comillas'

También se puede hacer al revés, si necesitas comillas simples dentro de la cadena, pones ésta entre comillas dobles y así no hay que doblar lo de dentro.

Si después de todo este rollo no es eso, asegúrate de que W7 te está dando las carpetas adecuadas para las macros de directorios. Piensa que por ejemplo "Archivos de programa" tiene versiones para programas de 64 bits y 32 bits, pero no sé si AutoIt contempla eso.

Re: Ejecutar comando con Windows 7

Publicado: 20 Nov 2012, 18:36
por jesss
Hola,

Cuando hago esto:

$command_rar=' "%ProgramFiles%\WinRAR\rar.exe" a...?

me sale lo de:

"C:\Program" no se reconoce como un comando interno o externo, programa o archivo por lotes ejecutables.

Lo había probado desde la consola normal y me había funcionado, pero ahora he notado que según como la ruta
%ProgramFiles%\WinRAR\rar.exe lo mismo le da como "C:\Program Files\WinRAR" que como "C:\Program Files (x86)\WinRAR" así que he optado por poner la ruta fija y ya parece funcionar.

Así que el comando al final queda:

$command_rar=' "c:\Program Files\WinRAR\rar.exe" a -ef -ed -ep1 -sl'&$espacio_max&'B -x*.lnk -x*.ini '&$dir_backup&'\'&$name_rar&' '&$dir_origen1&' '

Lo doy ya por solucionado, y perdonad las molestias.

Muchas gracias :)



----------------------------
Ximorro escribió:¿No será por doblar las comillas dobles en
$command_rar=' ""%ProgramFiles%\WinRAR\rar.exe"" a.....?
Debería ser
$command_rar=' "%ProgramFiles%\WinRAR\rar.exe" a...?

Se doblan las comillas si pones el string entre las mismas comillas. Por ejemplo
$a = "Esto ""está"" entre comillas"

Pero si se usan simples no hace falta, eso es lo bueno:
$a = 'Esto "está" entre comillas'

También se puede hacer al revés, si necesitas comillas simples dentro de la cadena, pones ésta entre comillas dobles y así no hay que doblar lo de dentro.

Si después de todo este rollo no es eso, asegúrate de que W7 te está dando las carpetas adecuadas para las macros de directorios. Piensa que por ejemplo "Archivos de programa" tiene versiones para programas de 64 bits y 32 bits, pero no sé si AutoIt contempla eso.

Re: [SOLUCIONADO] Ejecutar comando con Windows 7

Publicado: 21 Nov 2012, 09:24
por Ximorro
Es una pena que tengas que poner el path a piñón fijo cuando puede ser calculado y así adaptarse a diferentes instalaciones.

¿Has comprobado que te esté haciendo bien la expansión de la variable de entorno? Yo mostraría la cadena $command_rar por consola o en un MsgBox a ver qué tiene, igual te llevas alguna sorpresa. Analiza bien la expansión de la variable y cómo quedan las comillas en el resultado final.

También puedes probar a usar macros en vez de la expansión de variables, por ejemplo
$command_rar='"' & @ProgramFilesDir & '\WinRAR\rar.exe" a....'

Re: [SOLUCIONADO] Ejecutar comando con Windows 7

Publicado: 22 Nov 2012, 19:01
por jesss
Con lo del @ProgramFilesDir me sale lo de "c:\Program files (x86)". Con lo del MsgBox me sale directamente lo de "%Program%Files" porque no traduce todavía la variable del sistema. Y al hacer un echo me sale también lo de c:\Program files (x86). Supongo que debe ser más trabajoso meter en el path lo de la variables, que directamente la ruta para lo del WinRAR. Al menos para los datos de usuario me lo hace bien.

Un saludo, y gracias de nuevo.

Ximorro escribió:Es una pena que tengas que poner el path a piñón fijo cuando puede ser calculado y así adaptarse a diferentes instalaciones.

¿Has comprobado que te esté haciendo bien la expansión de la variable de entorno? Yo mostraría la cadena $command_rar por consola o en un MsgBox a ver qué tiene, igual te llevas alguna sorpresa. Analiza bien la expansión de la variable y cómo quedan las comillas en el resultado final.

También puedes probar a usar macros en vez de la expansión de variables, por ejemplo
$command_rar='"' & @ProgramFilesDir & '\WinRAR\rar.exe" a....'

Re: [SOLUCIONADO] Ejecutar comando con Windows 7

Publicado: 26 Nov 2012, 10:27
por Ximorro
¡¿Que no se expande la variable de entorno?!

Pues igual es ese el problema porque sí debe hacerlo. Las expande al asignarlas o mostrarlas. ¿Seguro que has activado la opción correspondiente? Y fíjate que pongas la variable bien, además comprueba que exista en ese sistema donde lo ejecutas y no donde lo estás programando, pues las variables de entorno te pueden cambiar de un ordenador a otro.

A mí por ejemplo esto me funciona perfectamente:

Código: Seleccionar todo

Opt("ExpandEnvStrings", 1)
ConsoleWrite("%ProgramFiles%\hola" & @LF)
Me muestra C:\Archivos de programa\hola
Con MsgBox(0, "", "%ProgramFiles%\hola") también funciona.