No se pueden analizar las marcas de voz "" en powershell usando RunProgramHola, tengo problemas para ejecutar PowerShell, por ejemplo:
cmd = EvalInsert(
"\[$imageFile = "test"]\");
rp1 = RunProgram(Executable("C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" ),
Options(Eval(cmd)),
ReadFunction("text")
);El cmd real que quiero usar es más complejo pero tiene el mismo problema con las marcas de voz. Imprimir rp1 en el registro da:
"test : The term 'test' is not recognized as the name of a cmdlet, function, script file, or operable program. Check
the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:14
+ $imageFile = test
+ ~~~~
+ CategoryInfo : ObjectNotFound: (test:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
" Lo que implica que la línea se ejecutó sin marcas de voz.
¿Cómo me aseguraría de que las marcas de voz se ejecuten correctamente?
Gracias de antemano por cualquier ayuda en esto.
Re: No se pueden analizar las marcas de voz "" en powershell usando RunProgramEl argumento de la línea de comandos necesita algunas comillas adicionales y escapar para que el análisis de la línea de comandos de powershell funcione. (Esta es la segunda vez que uso PowerShell, puede que esté pasando por alto algo ...) (Además, este color de sintaxis de la página web es incorrecto para el escape entre comillas).
command = "\["$imagefile = \"test\";echo $imagefile"]\";
Write( "\!nthe command is:", command ); // write shows it in the log without extra escapes
result = RunProgram(
executable( "powershell.exe" ), //
options( command ), //
readfunction( "text" )//
);
Show( result );
el comando es: "$ imagefile = \" test \ "; echo $ imagefile"
resultado = "prueba
";
Aquí hay una captura de pantalla de dos intentos que hice en una ventana CMD.
powershell output in a CMD windowpowershell output in a CMD windowsalida de PowerShell en una ventana CMD
Las comillas externas hacen que PowerShell vea una única opción; CMD elimina las comillas externas antes de que powershell obtenga el texto. En su ejemplo original, hubo tres elementos que recibió PowerShell ($ imagefile, =, prueba) y CMD eliminó las comillas externas alrededor de la prueba. Las comillas externas son necesarias cuando hay comillas o espacios en los argumentos.
Re: No se pueden analizar las marcas de voz "" en PowerShell usando RunProgramAcabo de encontrarme con una excelente explicación de la línea de comandos de Windows, las comillas, el escape y por qué parece tan difícil.
http://www.windowsinspired.com/the-correct-way-to-quote-command-line-arguments/
http://www.windowsinspired.com/understanding-the-command-line-string-and-arguments-received-by-a-windows-program/
http://www.windowsinspired.com/how-a-windows-programs-splits-its-command-line-into-individual-arguments/
Simplificado en exceso: los argumentos múltiples en una línea de comandos se separan con espacios. Cada comilla alterna si se usan espacios para separar los argumentos. \\ es un literal \ y \" es un literal ". Dos comillas adyacentes cuando se desactivan los espacios dan como resultado un literal ", pero los espacios se pueden activar o desactivar según la variación del analizador que se use.
Actualización 20 de enero de 2025: los enlaces se han vuelto obsoletos, versiones del archivo web:
http://web.archive.org/web/20220629215303/http://windowsinspired.com/the-correct-way-to-quote-command-line-arguments/
https://web.archive.org/web/20220629212707/https://www.windowsinspired.com/understanding-the-command-line-string-and-arguments-received-by-a-windows-program/
https://web.archive.org/web/20220629212422/https://www.windowsinspired.com/how-a-windows-programs-splits-its-command-line-into-individual-arguments/