Impossibile analizzare i segni vocali "" in PowerShell usando RunProgramCiao, ho problemi con l'esecuzione di PowerShell, ad esempio:
cmd = EvalInsert(
"\[$imageFile = "test"]\");
rp1 = RunProgram(Executable("C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" ),
Options(Eval(cmd)),
ReadFunction("text")
);Il cmd effettivo che voglio usare è più complesso ma presenta lo stesso problema con i segni di riconoscimento vocale. La stampa di rp1 nel registro fornisce:
"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
" Il che implica che la linea è stata eseguita senza segni vocali.
Come posso assicurarmi che i segni vocali vengano eseguiti correttamente?
Grazie in anticipo per qualsiasi aiuto in merito.
Re: Impossibile analizzare i simboli vocali "" in PowerShell tramite RunProgramMi sono appena imbattuto in un'ottima spiegazione della riga di comando di Windows, delle virgolette, dell'escape e del perché sembra così difficile.
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/
Semplicità eccessiva: più argomenti su una riga di comando sono separati da spazi. Ogni virgoletta attiva o disattiva gli spazi per separare gli argomenti. \\ è un letterale \ e \" è un letterale ". Due virgolette adiacenti quando gli spazi sono disattivati danno come risultato un letterale ", ma gli spazi possono essere attivati o disattivati a seconda della variante del parser utilizzata.
aggiornamento 20 gennaio 2025: i link sono diventati obsoleti, versioni archivio 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/
Re: Impossibile analizzare i segni vocali "" in PowerShell usando RunProgramL'argomento della riga di comando richiede alcune virgolette aggiuntive e l'escape per far funzionare l'analisi della riga di comando di PowerShell. (Questa è la seconda volta che uso PowerShell, potrei trascurare qualcosa...) (Inoltre, la colorazione della sintassi di questa pagina Web è errata per l'escape delle virgolette tra parentesi quadre.)
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 );
il comando è:"$fileimmagine = \"test\";echo $fileimmagine"
risultato = "prova
";
Ecco una cattura dello schermo di due tentativi che ho fatto in una finestra CMD.
powershell output in a CMD windowpowershell output in a CMD windowpowershell output in a CMD windowoutput di PowerShell in una finestra CMD
Le virgolette esterne fanno sì che PowerShell veda un'unica opzione; le virgolette esterne vengono rimosse da CMD prima che PowerShell ottenga il testo. Nell'esempio originale, sono stati ricevuti tre elementi da PowerShell ($imagefile, =, test ) e le virgolette esterne attorno al test sono state rimosse da CMD. Le virgolette esterne sono necessarie quando sono presenti virgolette o spazi negli argomenti.