Come eseguo più comandi CMD?Ciao,
Sto provando a fare un semplice estratto di un file zip (TGZ) da JMP usando il prompt dei comandi, e non riesco a farlo usando il seguente approccio (ho provato molte idee ridicole, nessuna sembra funzionare...) :
Names Default To Here( 1 );
path1="C:/Users/niros/Downloads/";
path2="C:/Program Files/WinRAR/WinRAR.exe";
path3="C:/Users/niros/Downloads/LP.tgz";
RP = RunProgram(
Executable( "CMD.EXE" ),
Options( { {"cd", path1}, {"mkdir", "testing"}, {"cd", "testing"}, {path2,"x", path3} } ),
Read Function("text")
);
Grazie!
ScriptingRi: Come posso eseguire più comandi CMD?Grazie a tutti molte volte! PMROZ La tua risposta è esattamente quello che stavo cercando!
L'ultimo difetto da parte mia è lo spazio nel percorso che si risolve facilmente con il carattere \!"...
Soluzione:
path1="C:/Users/niros/Downloads/";
path2="\!"C:/Program Files/WinRAR/WinRAR.exe\!"";
path3="C:/Users/niros/Downloads/LP.tgz";
//-------------------------------------------------------------------------------
// Create a command file to run multiple commands
cmd_file_text = evalinsert(
"rem Run multiple commands\!N
cd ^path1^\!N
mkdir testing\!N
cd testing\!N
^path2^ x ^path3^\!N
pause\!N
");
cmd_file_name = "c:\temp\run_commands.cmd";
// Save command file to disk
save text file(cmd_file_name, cmd_file_text, mode("replace"));
//-------------------------------------------------------------------------------
// The /c option carries out the command before terminating
run_cmds = runprogram(executable("cmd.exe"), options("/c " || cmd_file_name), readfunction("text"));
nw = new window("Output", << modal,
panel box("CMD output:",
text box(run_cmds, set width(800), set wrap(800),
<< Set Font( "Courier New" )),
)
);Ri: Come posso eseguire più comandi CMD?Ho dovuto aggiungere ritorni rigidi al file .cmd generato da JSL usando "\!N".
Ri: Come posso eseguire più comandi CMD?Per quel che vale, usare RunProgram è complicato... Sospetto che la maggior parte di noi debba provare molte idee ridicole prima di farlo funzionare 
Ri: Come posso eseguire più comandi CMD?Puoi anche scrivere tutti i comandi in un file CMD ed eseguirlo.
path1="C:/Users/niros/Downloads/";
path2="C:/Program Files/WinRAR/WinRAR.exe";
path3="C:/Users/niros/Downloads/LP.tgz";
//-------------------------------------------------------------------------------
// Create a command file to run multiple commands
cmd_file_text = evalinsert(
"rem Run multiple commands\!N
C:\!N
cd ^path1^\!N
mkdir testing\!N
cd testing\!N
^path2^ x ^path3^\!N
pause\!N
");
cmd_file_name = "c:\temp\run_commands.cmd";
// Save command file to disk
save text file(cmd_file_name, cmd_file_text, mode("replace"));
//-------------------------------------------------------------------------------
// The /c option carries out the command before terminating
run_cmds = runprogram(executable("cmd.exe"), options("/c " || cmd_file_name), readfunction("text"));
nw = new window("Output", << modal,
panel box("CMD output:",
text box(run_cmds, set width(800), set wrap(800),
<< Set Font( "Courier New" )),
)
);
Ri: Come posso eseguire più comandi CMD?Esempio 3 nell'indice di scripting
RunProgram set up to feed commands to CMD.exeRunProgram set up to feed commands to CMD.exeRunProgram impostato per alimentare i comandi a CMD.exe
è un modo.
Un altro modo potrebbe utilizzare un separatore di comandi all'interno dei parametri. Modificato dall'esempio 1:
RP = Run Program(
Executable( "CMD.EXE"/*path probably not needed*/ ),
Options( {"/a", "/q", "/c dir && echo hello && ping localhost"} ),
ReadFunction( Function( {this}, Write( this << read ) ) )
);
(Entrambi i precedenti sono configurati per leggere da cmd.exe, mentre viene eseguito, e scrivere le risposte nel registro JMP. Il tuo esempio originale con readfunction("text") è il modo più semplice e meno flessibile che raccoglie tutto l'output e lo presenta alla fine.)