Newsgroup: it.comp.lang.delphi
Titolo: uffa ma sto bat come deve funzionare ?

Ciao a tutti
continuo ad avere problemi nel capire come fare a far funzionare un .bat 
da shell per eseguire da delphi il mysqldump
il bat funziona correttamente mentre passando lo stesso parametro dal 
codice questo non và.
Repplico il codice della chiamata soltanto per completezza:
percorsofile := ExtractFilePath(ParamStr(0)) +
'backup\backupsql.bat dati.sql';
ShellExecuteOpenWait(percorsofile);
e nel bat
mysqldump  --opt --user=root --password=x db >%1 //x stà per nessuna 
password
continua dirmi che non trova il file ma come sappiamo il file deve 
crearlo il bat.
Omega

 password
in bash avrei inserito
echo $1 >'/tmp/miofile'
o direttamente
echo $1
ma ho mollato win da qualche anno e non ricordo bene la sintassi dei .bat.
Puoi visualizzare il valore %1 o scriverlo su un file?
considera che $1 nella *nix shell è l'uquivalente di %1 in dos
Bye,
Raktzo

 Raktzo
ma si quel %1 che tra l'altro mi è stato comunicato qui, dovrebbe 
accettare il parametro in ingresso che gli passo da riga di comando (e 
infatti questo funziona) ma quando uso la funzione per la shell da 
delphi mi restituisce un errore che riporta la mancaza del file in 
questione. Ma grazie il file devo farlo il bat così come avviene da 
prompt di dos caspita !
Insomma possibile che nessuno abbia mai risolto questo problema mi 
sembra assurdo e io ci stò diventando matto.
Omega

Omega
	Ciao
	MassimoB
 
---------------------------------
http://www.massimobeschi.it/
---------------------------------
Se tu pagare come dici tu ...
Io lavorare come dico io ...
Se tu pagare come dico io ...
Io lavorare come dici tu ...
---------------------------------

 Omega
-- 
Ciao, Anto', [38, 143, AQ] 
MB C SC 220 CDI Magma Rot
"Oggi c'è una grande battaglia di idee, ma alla 
fine, non ci saranno ne vinti, ne vincitori, ne idee!"
S. Benni da Elianto

 sembra assurdo e io ci stò diventando matto.
Può essere che hai preso una strada errata...
Bye,
Raktzo


si
errore non trova il file indicato
no non sono sicuro e non so come verificarlo
si viene chiamato di questo ne sono sicuro
è nella path
mi sà che mi lancio sul componente consigliato DOSCommand e se non 
riesco nemmeno li mi lancio da qualche altra parte.
tra l'altro questa funzione va bene se non gli passo parametri mentre se 
gli passo il parametro no.
Ma non avete un esempio funzionante di quello che voglio fare io ???
giusto per tagliare la testa a quel cornuto del toro (senza offesa per 
il toro naturalmente).
Omega

[cut]
prima di abbandonare lo ShellExecute fai un'ultima
varifica.
Sei sicuro che il FileName completo di path che gli
passi sia racchiuso fra virgolette per evitare brutti
scherzi con gli spazi e roba varia?
Devi passare una cosa del genere come parametro alla
tua funzione ShellExecuteOpenWait:
"C:\Ciccio\Pino\Ciccio e Pino\Tuo File.snieks"
dove le virgolette sono comprese nella stringa.


 il toro naturalmente).
ShellAPI nelle uses e poi
ShellExecute(0, nil, 'notepad', 'f:\pippo.txt', nil, SW_SHOWNORMAL);
questo apre il notepad e gli passa come paramentro i file da aprire,
se il file non esiste ti viene chiesto di crearlo, vedi tu come adattarla
alle tue esigenze, se imposti l'ultima opzione a SW_HIDE non vedrai le
finestre dos tipiche dell'esecuzione di file bat.


> no non sono sicuro e non so come verificarlo
ti ripendo, non ricordo come funzionano i .bat...e credo che la shell di
linux non ti sia d'aiuto...
Puoi provare con WinExec(una vecchia API di win) oppure con ShellExcecute o
CreateProcess
var PI       : TProcessInformation;
    SI       : TStartupInfo;
    I        : Integer;
begin
  Result:=INVALID_HANDLE_VALUE;
  FillChar(SI, SizeOf(TstartupInfo), #0);
  with SI do
    begin
      cb := SizeOf(TStartupInfo);
      dwFlags := STARTF_USESHOWWINDOW;
      wShowWindow:=cmdShow;
    end;
  If not CreateProcess( PChar(FileName), nil, nil, nil, False,
                 NORMAL_PRIORITY_CLASS, nil, nil, SI, PI) then Exit;
  I := WaitForInputIdle(PI.hProcess, 3000);
  if (I = WAIT_TIMEOUT) or (I<0) then Exit;
  CloseHandle(PI.hThread);
  Result:=PI.hProcess;
vedi cosa puoi tirarci fuori. La usavo per avviare delle applicazioni da un
mio programma che girava con WinNT
Bye,
Raktzo

 	MassimoB
Questo è l'errore che restituisce
  ---------------------------
"C:\Backup\PROGETTI\Delphi\test\backupsql.bat dati.sql"
---------------------------
Impossibile trovare il file 
""C:\Backup\PROGETTI\Delphi\test\backupsql.bat dati.sql"". Verificare 
che il percorso e il nome del file siano corretti e ritentare. Per 
cercare un file fare clic sul pulsante Start, quindi scegliere Trova.
---------------------------
OK
---------------------------

  
No cosě a me non va tra l'altro cercando la funzione nel sdk di win ho 
trovato che dovrebbe essere scritta cosě:
ShellExecute(Form1.Handle, PChar('open'), PChar('notepad'), 
PChar('pippo.txt'), PChar(percorso), SW_SHOWNORMAL);
e non va lo stesso naturalmente.
Non mi dŕ nessun errore semplicemente non fa nulla :(

 Raktzo
Grazie per lo sbattimento ma sta storia stà diventando un pò pesante per 
fare una cosa così banale mi sà che ci rinuncio.......... MA NO perchè 
diavolo non và è allucinante ma non potete provarci un attimo se vi 
riposto il codice per intero e tutti i vari passaggini precisi precisi 
??????
Omega

 riposto il codice per intero e tutti i vari passaggini precisi precisi
Ti ripeto, lavoro con linux e ShellExecuteQuelCheLè non esiste. Ci sono
altre strade...
A proposito...sul NG delphiedintorni si era discusso di come avviare un
processo e catturarne l'output tramite delphi. Non ricordo i riferimenti,
ma se fai una ricerca portesti avere lumi. Ora, se togli il
reindirizzamento, carichi l'output e provvedi tu a salvare dove vuoi?
Bye,
Raktzo

 ""C:\Backup\PROGETTI\Delphi\test\backupsql.bat dati.sql"". Verificare
Credo non gli piaccia essere chiamato con i parametri...
Bye,
Raktzo



guarda che l'ho testata sul mio pc e va alla grande,
ho creato il file f:\pippo.bat con la seguente istruzione "notepad %1"
e il file f:\pippo.txt e la seguente riga di codice
ShellExecute(Form1.Handle, nil, 'f:\pippo.bat', 'f:\pippo.txt', nil,
SW_HIDE);
apre il notepad che carica il file, e poi lascia perdere quello che dice
l'sdk, gli altri parametri non sono importanti e non serve fare il cast a
PCHAR per le costanti stringa, fai una prova su un progetto di test con una
form e un bottone, nel onclik del bottone metti, sempre la unit shellapi
nelle uses ovviamente:
ShellExecute(0, nil, 'C:\Backup\PROGETTI\Delphi\test\backupsql.bat',
'unita:\percorsocompleto\dati.sql', nil, SW_SHOWNORMAL);
se continua a darti errore file non trovato imho č il bat che non funziona
-- 
Ciao, Anto', [38, 143, AQ] 
MB C SC 220 CDI Magma Rot
"Oggi c'č una grande battaglia di idee, ma alla 



Hummm se non riesco attraverso il metodo diciamo un pò più immediato 
faccio come dici thanks
Omega


Mah ?!
Bhe vediamo.
Omega

 
Allora il bat da solo lanciato da riga di comando va alla perfezione.
La sintassi cosě come la indichi tu il compilatore (D7) non la passa 
dice tipo incompatibile e mi obbliga a fare il cast e va bhe.
Nessun codice di errore nessuna richiesta di file nulla di nulla 
semplicemente non fŕ un emerito piffero. DIMMI ho i fantasmi in delphi ?
Ma come diavolo se ne esce da stň incubo ???
Omega

Omega


 scegliere Trova.
Come distingui il nome del file dai parametri?
Il nome del File tra virgolette (compresi i parametri) fanno parte del 
comando che non trova
credo che dovrebbe essere
"C:\Backup\PROGETTI\Delphi\test\backupsql.bat " "dati.sql"
distinguendo il nome dai parametri (se non fa' il concatenameto, non l'ho 
provato)
Ciao
P.

 P.
No mi arrendo vado su DosCommand sperando che la cosa non sia ancora peggio.
Omega

 porvi rimedio.
Ok passo a DosCommand anche se a malincuore... pazienza.
Omega

 Omega
E infatti tutto è filato liscio al primo colpo ringrazio tutti per la 
pazienza e scusate la testardaggine.
Omega