Newsgroup: it.comp.programmare
Titolo: aiuto comandi dos

Auto per favore è urgente.
Allora devo creare un file bat che in automatico vada a controllare
che in una directory ci siano dei file e se ci sono me li deve copiare
in un altra cartella e poi cancellare.
So che il comando è copy ma nn conosco la sintassi corretta.
Aiuto per favore. Grazie mille.
Ciao.

 ha scritto nel messaggio 
news:1179484628.9...@q23g2000hsg.googlegroups.com...


Lo so che con un linguaggio è molto più semplice...
Solo che lo devo fare in dos...
Va be il comando copy è facilissimo...
Ora nn ho propio idea di come posso fargli eseguire questo file bat
sempre....

 sempre....
Chiamarlo in autoexec.bat? (anche se non so se il dos lo esegue...)
Regards,
David
-- 
 . ''`.  Debian packager! | 
http://snipurl.com/gofoxygo/
 : :'  :   User #334216   |  
http://www.hanskalabs.net/
 `. `'`   GPG: 1392B174   | 
http://www.debianizzati.org/
   `-   2BAB C625 4E66 E7B8 450A C3E1 E6AA 9017 1392 B174

 Ciao.
IF EXIST C:\DIR\FILE.EXT MOVE C:\DIR\FILE.EXT D:\ALTRADIR
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Non ho capito la storia dell'autoexec.bat
Cmq nn sono ancora riuscito a risolvere il problema che questo
programma deve essere attivo sempre...
In pratica a grnadi linee... ho un programma che mi crea un file in
una determinata directory chiamiamola cartella1... poi ho un altro
programma che mi deve elaborare quel file e lo cerca in un altra
cartella chiamiamola cartella2 ma nn lo può prelevare direttamente
dalla cartella1 dov'è presente.
Quindi devo fare questo file bat che mi controlli ogni secondo che
nella cartella1 ci sia quel file per copiarlo nella cartella2 dove il
mio programma lo può elaborare o provato a vedere l'esecuzione
automatica di windows ma al massimo me lo esegue una volta al giorno e
nn mi va bene...

 nn mi va bene...
ogni secondo?
Abbi pazienza, ma io mi permetto di supporre che tu non abbia molta
conoscenza circa i files e il loro trattamento: lo deduco sia dal fatto
che non riesci a scrivere 2 righe di batch, sia dal modo in cui esponi le
specifiche.
Ricominciamo daccapo.
C'e' un programma1 che genera un file.
Come lo genera questo file?
Lo genera di continuo o ad un certo punto smette?
Quindi tu vuoi spostare questo file altrove per farlo elaborare da un
programma2.
Chiedo: usare una pipe, no?
Evidentemente no.
Il programma2 elabora il file nella nuova directory, quindi devi aspettare
che finisca prima di fornirgli nuovo input, altrimenti rischi di
sovrascrivere il file precedente.
A meno che tu non voglia andare in accodamento, ma in questo caso
subentrano altre problematiche.
Dovresti essere molto piu' preciso sulle circostanze, perche' di sicuro un
COPY non basta, e probabilmente neppure un batch, se bisogna verificare lo
stato dei files...


tranquillo la conoscenza dei file, dei programmi, del programmare c'è
l'ho ero indeciso sulle istruzioni dos perchè nn le ho mai usate.
Scusa ma il tuo permettersi mi ha dato fastidio... mo sembrerò uno
cattivo ma nn puoi supporre se nn mi conosci... Evidentemente nn mi
riesco a spiegare però supporre che io nn sono capace di fare una cosa
senza che mi conosci ce ne vuole...
Non sarò laureato in igengeria informatica però se faccio sti lavori
qua qualcosa dovrò pur capire di computer e programmazione... E poi nn
so quanti anni hai, ma guarda la mia età... Non ho esperienza e se un
problema per voi è facile per me no. Scusami però mi ha dato fastidio
questa tua supposizione!
Tutto quello che mi hai chiesto è una cosa inutile non sono così'
complicati i due programmi... poi a me la faccenda l'hanno spiegata
velocemete e senza darmi indicazioni precise so solo che i due
programmi nn posso andare a prendere il file nella cartella dell'altro
e questione di VPN e NAT
Voglio solo che il mio file bat rimanga sempre attivo appena trova un
nuovo file in quella cartella me la sposta nell'altra
lasciate stare tutte le complicanze perchè nn c'è ne sono e se ci sono
le risolverò... Devo solo avere quel file bat sempre in funzione che
mi preleva il file da una cartella e me lo metta nell'altra.


anzi no... se c'è un modo si attiva quando viene creato un file nella
cartella1
Cioè cartella1 vuota il file bat nn fa niente cartella1 c'è un file
allora il file bat sposta il nuovo file... tipo un ghost che fa un
controllo sull'esistenza di un file... si più fare o è troppo
complicato?

 complicato?
Tu vieni qui a chiedere qualcosa che sembra interessante, ti spieghi in
modo approssimato, ritieni di capire le problematiche e poi fai il
permaloso.
Non e' questo l'atteggiamento giusto.
Ricominciamo daccapo.
Questo programma1 crea un file  C:\DIR1\FILE1
Forse per te questa cosa e' chiara perche' conosci il programma1.
Io non lo conosco e vorrei sapere quando programma1 finisce il suo
processo di creazione, perche' se io vado a vedere se il file esiste,
niente mi garantisce che programma1 ha finito di fare quello che deve fare.
Supponiamo che programma1 sia un processo che zippa un intero filesystem
(esagero per sottolineare il concetto).
Vuol dire che produrra' un file enorme mettendoci pure parecchio tempo.
E non puoi pretendere, a meta' del suo processo di elaborazione, di andare
a togliergli da sotto il naso il file che sta creando per passarlo di la'.
Questo e' il primo problema.
Secondo problema.
Supponiamo che tu hai spostato il tuo file nella C:\DIR2 per
l'elaborazione del programma2.
Quanto ci mette questo programma2 ad effettuare l'elaborazione?
Perche' se tu, un secondo dopo, pretendi di copiare un altro file sopra
quello che programma2 sta elaborando, e prima che finisca, si incasina
tutto pure qua.
I problemi da risolvere sono questi.
Rileggi un po' tutta la discussione dall'inizio, mettendoti nei miei panni
che sto cercando di aiutarti, e poi vedi un po' se sia meglio fornirmi
informazioni sui punti critici o fare il permaloso.


Te lo detto ho fatto il permaloso perchè te hai fatto delle ipotesi
sul mio conto che mi hanno dato fastidio...
Te l'ho detto... Nn mi conosci e nn puoi giudicarmi.
Potrei dirti che anche il tuo non è stato un attegiamento corretto...
Cosa ti interessa se mi intendo di computer o no... Cioè, capito il
mio discorso?... mi sono difeso. e mi sono scusato cmq
Cmq ricominciamo.
I programmi non hanno qui tempi o così lunghi o così corti
Uno mi crea un file con dei dati... l'altro prende quei dati e crea
l'etichetta da stampare... nn so darti altre spiegazioni perchè la
persona che sa ste cose nn c'è e a me hanno dato questo compito di
fare un bat che copi i file da una cartella all'altra e rimanga sempre
attivo, cioè si possa attivare ogni minuto o tempi simili. La
schedulazione di windows nn me lo permette.
In pratica un programma è collegato alla bilancia... riceve il peso e
il nome e mi crea il file "etichetta" il secondo programma va nella
cartella dove c'è il file etichetta e me lo preleva lo elabora e lo
stampa. Questo in una lan si può fare. Però per come è strutturata la
rete e i programmi fuori tramite NAT non si può fare.
Quindi mi serve che il mio programmino in bat mi prelevi il file
"etichetta" dalla cartella sorgente... e lo copy nella nuova cartella
dove il programma che stampa lo possa ricevere.
Quindi ho capito fin dall'inizio il discorso dei tempi e ti dirò che
mi hanno dato informazioni sommarie ma sono sicuro che il primo
programma metto il file in quella cartella quando è già pronto.
Poi come ho detto per quei problemi li vedrò in un secondo momento con
una persona. Voglio sapere se riesco a far si che il mio programmino
rimanga attivo in modo da poter prelevare il file...
Mi sono spiegato ora?

 Mi sono spiegato ora?
Un po' meglio.
Entriamo nel dettaglio:
La bilancia crea files con nomi diversi ad ogni pesata, suppongo.
Nel qual caso nella directory iniziale tu trovi piu' files.
Quindi nel caso in cui tu trovi 2 o piu' files, sicuramente il piu'
vecchio e' chiuso e puoi spostarlo senza problemi.
Se ne trovi invece uno solo, spostarlo brutalmente potebbe sempre
incappare nel problema che la bilancia non abbia ancora finito.
Lasciamo stare questo problema per il momento.
Spostiamo il file di la':
IF EXIST C:\DIR1\FILE1.EXT MOVE C:\DIR1\FILE1.EXT C:\DIR2
Pero' ora mi sorge il dubbio: se la bilancia cambia nome al file ogni
volta questo comando non funziona perche' non sai come si chiama il file.
Viceversa se la bilancia scrive sempre in accodamento sullo stesso file,
il rischio di togliere il file da sotto il naso alla bilancia a meta' di
una pesata e' alto.
Andiamo dall'altra parte.
Hai spostato il file.
Il programma2 come fa a stampare l'etichetta?
E' pure lui in perenne attesa che arrivi un file, e quando lo trova lo
apre, lo legge e lo stampa?
Poi suppongo che lo tolga da li' una volta stampato, altrimenti come fa la
volta dopo?
Sono problemi da affrontare e risolvere.
Ad ogni modo ti lascio una soluzione al tuo problema di ripetere il
programma in continuazione: 
Chiami il tuo file  NOMEFILE.BAT
e dentro ci scrivi
IF EXIST C:\DIR1\FILE1 MOVE C:\DIR1\FILE1 C:\DIR2
CALL NOMEFILE.BAT
in pratica, quando ha finito, richiama se stesso e cicla all'infinito.
E' uno schifo come soluzione e ti dara' un sacco di problemi, ma intanto
puoi fare delle prove...
Poi con calma vediamo di affrontare gli altri problemi di concorrenza di
accesso, conflitti sui nomi dei files, etc... perche' non e' dicendo che
tanto i files sono piccoli e l'elaborazione ci mette poco che si risolvono
queste problematiche.
Se le sottolineo e' perche' ci sono passato: non minimizzarle.


Ok scusa mi sono dimenticato
Allroa i file sono numerati in modo progressivo 1,2,3,4 ecc...
Quindi nn c'è nessun tipo di problema...
Per la storia che il copy nn funziona perchè i file hanno nomi diversi
nn è vero, basta fare copy c:\cartella1\*.txt cosi ti copia tutti i
file presenti nella cartella poi subito dopo metto una riga che dico
di spostare i file in una cartella old così il problema dei file
vecchi nn c'è.
Poi il programma due si fa quello. una volta stampato il file lo mette
in un'altra cartella. E mi sembra (nn lo so intuisco) che anche lui
sia controlli la cartella del programma1 in attesa di nuovi file.
Va beh io ora vado. Vedrò di risolvere il problema.
Grazie cmq e scusa

 Va beh io ora vado. Vedrň di risolvere il problema.
Adesso la questione mi sembra molto meglio delineata.
Per come stanno le cose, utilizzare dei comandi DOS mi pare decisamente 
pericoloso per l'integrita' dei dati e per la corretta gestione del 
processo.
Se ti fosse possibile scrivere una applicazione specifica che effettua 
questa operazione sarebbe sicuramente meglio.
Poi hai parlato genericamente di DOS, ma l'interprete di comandi che 
utilizzi e' il 
COMMAND.COM
 del DOS e di win9x oppure puoi usare il CMD 
che ha qualche cosina in piu', e magari si riesce ad utilizzare 
efficacemente il FOR, testare la lunghezza dei files per capire se i 
files sono stati chiusi e quindi si possono copiare senza problemi, etc...
Poi, hai anche accennato ad un NAT, quindi devo supporre che vi sia di 
mezzo una rete, la quale comporta altre problematiche: copiare un file 
in una directory di rete e' una operazione piu' lunga che copiarlo in 
un'altra directory dello stesso filesystem.
E una durata maggiore nella copia introduce un incremento della 
probabilita' di errore nel tuo processo se il secondo programma comincia 
ad aprire il file per stamparlo prima che tu abbia terminato di copiarlo.
Per quanto semplice, il tuo problema nasconde molte insidie, che se 
vengono sottovalutate provocheranno un malfunzionamento sporadico, 
oppure la perdita di qualche file o di parte di esso.
Infine, questa procedura che dovra' girare in continuazione per fare 
questo lavoro di copia continua, dovrai anche prevedere il modo per 
fermarla manualmente senza usare necessariamente le maniere forti.

qua qualcosa dovrò pur capire di computer e programmazione...
Ti assicuro che non è affatto detto che chi fa "sti lavori qua" ci
capisca di computer e programmazione, ma comunque... non è possibile
che un programma batch rimanga _sempre attivo_, quindi sarebbe molto
più sensato scrivere un programma vero e proprio in grado di
controllare periodicamente quella cartella (un polling di 1 secondo mi
sembra davvero eccessivo) e sposti i file quando è sicuro che siano
stati scritti definitivamente. Questa operazione dovrebbe essere
possibile cercando di aprire il file in modalità esclusiva sino a che
non si riesce. A quel punto lo si copia all'indirizzo di destinazione
e si ricomincia.

Ok allora per il lavoro che devo fare il CALL va benissimo....
Lasciamo stare i controlli sui file che mi hanno detto che ci pensano
dopo e cmq gli ho fatto una bozza di controlli tramite due bat che si
richiamano...
Ora il mio problema è che il CALL dopo un po esce.... nn si cicla
all'infinito...
C'è un modo per far si che il ciclo si ripeta all'infinito?

 C'č un modo per far si che il ciclo si ripeta all'infinito?
Il CMD prevede un comando GOTO, che di solito si usa per i salti 
condizionati, non essendoci nell'interprete di comandi una stuttura 
IF...THEN...ELSE
Non ho mai provato a verificare se il GOTO funziona anche all'indietro.
Se funzionasse, potresti provare una cosa orrenda del tipo
:LABEL
ECHO Hello, world
GOTO LABEL
purche' tu non vada a dire da nessuna parte che questa cosa te l'ho 
detta io.
La mia opinione in proposito resta che l'interprete di comandi dos e' 
assolutamente insufficiente per svolgere questo compito e al tuo posto 
mi sarei rifiutato di utilizzarlo, potendo benissimo sopperire in 1000 
modi piu' adatti allo scopo.