Cadena con " comillas dobles Topic is solved
Moderator: Flipeador
-
- Posts: 41
- Joined: 13 Nov 2022, 09:31
Cadena con " comillas dobles
como ejecutor el siguiente comando:
Run, %Juego% %Parametros%
Pero quiero que %Parametros% vaya entre " comillas dobles ya que la cadena una vez convertida debe de ser algo asi:
Juego.exe "c:\directorio\fichero con espacios.vdx"
No consigo averiguar como y me estoy volviendo loco.
Run, %Juego% %Parametros%
Pero quiero que %Parametros% vaya entre " comillas dobles ya que la cadena una vez convertida debe de ser algo asi:
Juego.exe "c:\directorio\fichero con espacios.vdx"
No consigo averiguar como y me estoy volviendo loco.
Re: Cadena con " comillas dobles
Me pregunto para qué querrías las comillas en el parámetro. Quizás el problema se deba a una mezcla de las sintaxis "Legacy" y "Expressions".
Todas estas versiones funcionan correctamente:
Si ninguna de estas variantes te funciona bien, sube el código que estás usando.
Todas estas versiones funcionan correctamente:
Code: Select all
run, notepad.exe D:\Pruebas\Sintaxis del comando Run.txt
fichero := "D:\Pruebas\Sintaxis del comando Run.txt"
run, notepad.exe %fichero%
programa := "notepad.exe"
fichero := "D:\Pruebas\Sintaxis del comando Run.txt"
run, %programa% %fichero%
; o también todo en legacy syntax, aunque no recomendada:
programa = notepad.exe
fichero = D:\Pruebas\Sintaxis del comando Run.txt
run, %programa% %fichero%
-
- Posts: 41
- Joined: 13 Nov 2022, 09:31
Re: Cadena con " comillas dobles
@sofista
Lo que hago es pasar los Argumentos recibidos de array a cadena, y luego llamo a un ejecutable y se los paso, pero cuando la cadena tiene una ruta de fichero con algún espacio en el nombre, pues falla, ya que si pongo "" en la variable también falla, puesto que si hay algún parámetro que no es una ruta Falla. Que puedo hacer para que cuando convierto lo que recibo a cadena pueda saber si es una ruta y en ese caso poner a ese argumento "", pero sino es una ruta q lo deje normal.
Lo que hago es pasar los Argumentos recibidos de array a cadena, y luego llamo a un ejecutable y se los paso, pero cuando la cadena tiene una ruta de fichero con algún espacio en el nombre, pues falla, ya que si pongo "" en la variable también falla, puesto que si hay algún parámetro que no es una ruta Falla. Que puedo hacer para que cuando convierto lo que recibo a cadena pueda saber si es una ruta y en ese caso poner a ese argumento "", pero sino es una ruta q lo deje normal.
Re: Cadena con " comillas dobles
Es probable que el problema se encuentre en el ejecutable que mencionas, porque cargar ficheros con rutas guardadas en un array funciona bien. Ej.:
Como te pedí antes, publicá el código que estás usando, de otra manera es difícil que pueda ayudarte más.
Code: Select all
arr := [ "D:\Pruebas\Prueba de ruta con espacios 1.txt"
, "D:\Pruebas\Prueba de ruta con espacios 2.txt"
, "D:\Pruebas\Prueba de ruta con espacios 3.txt" ]
For k, v in arr {
run, notepad.exe %v%
}
-
- Posts: 41
- Joined: 13 Nov 2022, 09:31
Re: Cadena con " comillas dobles
@sofista
Como puedo enviar todos los argumentos que recibo a otro programa. Los argumentos pueden ser una opción o una dirección a un fichero con o sin espacios por medio. Como ejemplo;
Vpinball.exe /play d:\directorio con espacio\directorio\fichero.vbx
Como puedo enviar todos los argumentos que recibo a otro programa. Los argumentos pueden ser una opción o una dirección a un fichero con o sin espacios por medio. Como ejemplo;
Vpinball.exe /play d:\directorio con espacio\directorio\fichero.vbx
Re: Cadena con " comillas dobles
No tengo ese programa, así que doy tres ejemplos con Notepad++. Supongamos que quiero abrir un archivo y que el cursor se coloque de inicio en la línea 4. Haría de la siguiente manera (la dificultad está en los escapes de las comillas):
Code: Select all
; Expressions syntax, incluye la ruta del fichero
run, % "notepad++.exe -n4 ""D:\Pruebas\Prueba de ruta con espacios 1.txt"""
; Expressions syntax, paso la ruta del fichero como variable
fichero := """D:\Pruebas\Prueba de ruta con espacios 1.txt"""
run, % "notepad++.exe -n4 " fichero
; Legacy syntax, paso la ruta del fichero como variable
fichero := """D:\Pruebas\Prueba de ruta con espacios 1.txt"""
run, notepad++.exe -n4 %fichero%
-
- Posts: 41
- Joined: 13 Nov 2022, 09:31
Re: Cadena con " comillas dobles
@sofista
Ese es mi codigo, el problema es que asi como esta, si yo lo ejecuto de la siguiente forma: Miprograma.exe /play d:\directorio con espacio\directorio\fichero.vbx
Cuando vuelvo a llamar al programa para ponerlo en modo Administrador, me da un fallo, puesto que corta el directorio por el primer espacio en blanco. Y yo lo que quiero es que envie lo siguiente:
Vpinball.exe /play d:\directorio con espacio\directorio\fichero.vbx ---> Me da fallo porque coge cada espacio como si fuese un argumento pasado
Vpinball.exe /play "d:\directorio con espacio\directorio\fichero.vbx" --> Esto es lo correcto y lo que busco hacer, que cuando sea una ruta, la ponga entre comillas dobles.
Con la ruta entre comillas dobles, y no todo. Si pongo Run, Vpinball.exe %Parametros% de la siguiente forma Run, Vpinball.exe "%Parametros%" me da error porque haria lo siguiente Vpinball.exe "/play d:\directorio con espacio\directorio\fichero.vbx" , meteria entre comillas tambien el /play y solo quiero la ruta.
Code: Select all
Parametros := ArrayToStr(A_Args, " ")
RunAsAdmin(Parametros)
if A_IsAdmin {
MsgBox, Script en modo Administrador con parametros %Parametros%
} else {
MsgBox, Script en modo Normal con parametros %Parametros%
}
Run, Vpinball.exe %Parametros%
RunAsAdmin(RParametros=""){
if not A_IsAdmin {
if A_IsCompiled
Run *RunAs "%A_ScriptFullPath%" "%RParametros%"
else
Run *RunAs "%A_AhkPath%" "%A_ScriptFullPath%" "%RParametros%"
ExitApp
}
}
ArrayToStr(Array, Separacion=" "){
local Str := ""
For Index, Value In Array {
Str .= Value . Separacion
}
Str := RTrim(Str, Separacion)
return Str
}
Cuando vuelvo a llamar al programa para ponerlo en modo Administrador, me da un fallo, puesto que corta el directorio por el primer espacio en blanco. Y yo lo que quiero es que envie lo siguiente:
Vpinball.exe /play d:\directorio con espacio\directorio\fichero.vbx ---> Me da fallo porque coge cada espacio como si fuese un argumento pasado
Vpinball.exe /play "d:\directorio con espacio\directorio\fichero.vbx" --> Esto es lo correcto y lo que busco hacer, que cuando sea una ruta, la ponga entre comillas dobles.
Con la ruta entre comillas dobles, y no todo. Si pongo Run, Vpinball.exe %Parametros% de la siguiente forma Run, Vpinball.exe "%Parametros%" me da error porque haria lo siguiente Vpinball.exe "/play d:\directorio con espacio\directorio\fichero.vbx" , meteria entre comillas tambien el /play y solo quiero la ruta.
Re: Cadena con " comillas dobles
Queda claro por qué el código que subiste no funciona correctamente, pues la función ArrayToStr toma los elementos de un array y los concatena separándolos con un espacio. En ninguna línea se intenta siquiera colocar comillas donde corresponde, tal como te mostré en mi anterior mensaje.
De ahí que se corte el directorio en el primer espacio. Sugiero que hagas algo como esto —sólo cambié el separador para que se note bien el encomillado—:
Por último, sugiero que leas en el AutoHotkey Help las diferencias entre las sintaxis legacy y la de expresiones, cuándo corresponde usar una y cuándo la otra. Comprender estos conceptos y usos en crucial para mejorar el código propio y el escrito por otros desarrolladores.
Buena suerte con tu proyecto.
De ahí que se corte el directorio en el primer espacio. Sugiero que hagas algo como esto —sólo cambié el separador para que se note bien el encomillado—:
Code: Select all
arr := [ "Miprograma.exe /play d:\directorio con espacio\directorio\fichero1.vbx"
, "Miprograma.exe /play d:\directorio con espacio\directorio\fichero2.vbx"
, "Miprograma.exe /play d:\directorio con espacio\directorio\fichero3.vbx" ]
ArrayToStr2(arr, Separacion := " ") {
Str := ""
For Index, Value in arr {
RegExMatch(value, "i)^(.+)([A-Z]:\\.+)$", m)
Str .= m1 Chr(34) m2 Chr(34) Separacion
}
Str := RTrim(Str, Separacion)
return Str
}
MsgBox, % ArrayToStr2(arr, "`n")
/* Output:
Miprograma.exe /play "d:\directorio con espacio\directorio\fichero1.vbx"
Miprograma.exe /play "d:\directorio con espacio\directorio\fichero2.vbx"
Miprograma.exe /play "d:\directorio con espacio\directorio\fichero3.vbx"
*/
Buena suerte con tu proyecto.
Re: Cadena con " comillas dobles
Podrias indicarme el enlace, en la ayuda no encuentro ese apartado, perdona pero mi ingles no es muy bueno.sofista wrote: ↑02 Oct 2023, 13:34
Por último, sugiero que leas en el AutoHotkey Help las diferencias entre las sintaxis legacy y la de expresiones, cuándo corresponde usar una y cuándo la otra. Comprender estos conceptos y usos en crucial para mejorar el código propio y el escrito por otros desarrolladores.
Buena suerte con tu proyecto.
-
- Posts: 41
- Joined: 13 Nov 2022, 09:31
Re: Cadena con " comillas dobles
Perdona pero mi ingles no es muy bueno, podrias pasarme el enlace de donde se encuentra esa ayuda. No consigo verla.sofista wrote: ↑02 Oct 2023, 13:34Por último, sugiero que leas en el AutoHotkey Help las diferencias entre las sintaxis legacy y la de expresiones, cuándo corresponde usar una y cuándo la otra. Comprender estos conceptos y usos en crucial para mejorar el código propio y el escrito por otros desarrolladores.
Buena suerte con tu proyecto.
Mil Gracias por tu ayuda.
Re: Cadena con " comillas dobles Topic is solved
Sí, por supuesto. Esa información está aquí: Expressions vs. Legacy Syntax .BlackDraGoN wrote: ↑03 Oct 2023, 02:49Perdona pero mi ingles no es muy bueno, podrias pasarme el enlace de donde se encuentra esa ayuda. No consigo verla.sofista wrote: ↑02 Oct 2023, 13:34Por último, sugiero que leas en el AutoHotkey Help las diferencias entre las sintaxis legacy y la de expresiones, cuándo corresponde usar una y cuándo la otra. Comprender estos conceptos y usos en crucial para mejorar el código propio y el escrito por otros desarrolladores.
Buena suerte con tu proyecto.
Mil Gracias por tu ayuda.
En caso de dificultades con el idioma, podrías usar el servicio de traducción de DeepL .