Jump to content
PLC Forum

ALESSANDROF

Comando Per Cancellare File - Comandi DOS

Recommended Posts

ALESSANDROF

Devo creare un eseguibile per cancellare un file su sistema dos.

Tale eseguibile è caricato su floppy e mi serve per eliminare un file di log.

Il file di log è contenuto in una cartella, il cui nome è in parte sconusciuto: mi spiego meglio:

C:\TEMP1\log.txt

C:\TEMP2\log.txt

C:\TEMP3\log.txt

Il file può essere contenuto o nella directory TEMP1, o TEMP2 o TEMP3.

Ho provato a scrivere il comando nel seguente modo

del C:\TEMP*\log.txt

ma non viene accettato.

Ovviamente potrei scrivere le tre righe di comando

del C:\TEMP1\log.txt

del C:\TEMP2\log.txt

del C:\TEMP3\log.txt

ma purtroppo devo scriverne solo una.

Qualcuno può aiutarmi?

Ringrazio anticipatamente.

Alessandrof

Link to post
Share on other sites

Guest bingobongo

i caratteri jolly non sono accettati nei nomi delle directory :( , perchè DEVI scrivere una sola riga di comando ? <_<

Edited by bingobongo
Link to post
Share on other sites
pidmaster

se ricordo bene c'era un comanfo DOS chiamato XDEL che aveva dei pramtetri in piu' e forse accettava le wildcards....

Link to post
Share on other sites
mircoelektra

Puoi eseguire l' operazione in una sola riga di comando scrivendo:

for %f in (temp1, temp2, temp3) do del %f\log.txt

Ma ... non ho ben capito: hai detto che devi "creare un eseguibile", significa che vuoi creare un file batch? In tal caso perchè ti serve solo una riga di comando?

O per eseguibile intendi proprio un file "compilato" (EXE / COM)?

Io tempo ai tempi del DOS (ora non lo utilizzo più!) a volte mi creavo delle utility tipo quella che serve a te scrivendola in c e mi generavo il mio file eseguibile, magari che accettava parametri in ingresso per definire alcune opzioni.

Se utilizzi ancora DOS ed hai un po' di dimestichezza con il linguaggio c potresti utilizzare il Borland C (che adesso mi pare che venga distribuito in licenza freeware, ovviamente nella vecchia versione per DOS!).

Link to post
Share on other sites
nll

Prova a crearti un file batch (*.bat) con questo comando:

for %%f in (C:\TEMP*) do del %%f\\log.txt
e poi richiama il file batch per eseguire la serie di comandi. Anche se non trova il file log.txt in una cartella, semplicemente ti manda il messaggio di file non trovato e prosegue l'esecuzione sulla cartella seguente (tutte quelle che iniziano per TEMP. Puoi reindirizzare l'output su un file nullo, per evitare di vederti a video i messaggi d'errore e quelli di progresso dei comandi. Il reindirizzamento si fa accodando alla precedente linea di comando:
>nul

al posto di "nul" puoi mettere il nome di un file di testo, che potrai consultare successivamente, per verificare che l'esecuzione sia andata come volevi.

Doppio simbolo di percentuale e doppia barra retroversa sono necessari in quanto il comando è in un file batch (così non devi rieditarlo ogni volta), mentre da prompt dei comandi devi metterli singoli.

Link to post
Share on other sites
mircoelektra

Mentre scrivevo la mia risposta non mi rendevo conto che altri due stavano rispondendo contemporaneamente :P che coincidenza :) !!!

Comunque XDEL è laprima volta che lo sento, e il comando for con "TEMP*" non penso che funzioni ... ma non ci giurerei!

Link to post
Share on other sites
nll

Non avevo visto le risposte di chi mi precede, in particolare quella di mircoelektra, che praticamente fornisce la mia stessa strada con DOS. Scrivo per precisare la questione della doppia ricorrenza del carattere "%" e della barra retroversa e aggiungo che anche nel mio suggerimento è bene sostituire il drive con una variabile che punta al suo nome, in quanto sospetto che la barra retroversa passata come argomento del ciclo "for" debba essere raddoppiata (ma non ne sono certo), perché altrimenti viene interpretata come separatore di argomento e quindi l'esecuzione del ciclo verrebbe fuori come segue:

del C:\log.txt
del TEMP1\log.txt  (eseguito nella cartella da dove è stato lanciato il comando!)
...
del TEMPn\log.txt
del TEMPIO_PAUSANIA\log.txt
del TempiProgettoImportante\log.txt
del TEMPORARY\log.txt
....
eccetera...
e magari non è quello che volevi. puoi creare la variabile nel file batch ed eliminarla al termine del ciclo "for"
set discoc="C:\"
for %%f in (%%discoc%%TEMP*) do del %%f\\log.txt
set discoc=

A memoria non ricordo se devi mettere un simbolo di percentuale prima e dopo il nome della variabile, quando si trova nel comando "set" dentro il file batch, ma certamente devi metterli doppi nella riga di comando del ciclo "for".

Certo che un vero eseguibile, in qualunque linguaggio vuoi realizzarlo, ti può permettere un maggiore controllo e l'inserimento di parametri che renderebbero l'applicativo maggiormente flessibile.

Edited by nll
Link to post
Share on other sites
ALESSANDROF

Grazie a tutti per l'interessamento: provo e vi faccio sapere.

Perchè non posso scrivere più di una riga?

Perchè il sitema il questione registra dei dati nel file log.

Tali dati dopo x giorni vengono cancellati (il periodo x è impostabile).

Il supporto su cui vengono registrati i dati è un CF da 128M.

Se per errore il periodo x è troppo alto, i dati non vengono cancellati la CF si riempie è il sistrema si blocca.

A questo punto l'operatore dovrebbe cancellare i file.

Ma siccome la stragrande maggioranza non è in grado di farlo, ecco che creando un floppy autoeseguibile da inverire all'avvio, si risolverebbe il problema:

spegnere

inserire floppy

avviare

attendere completamento operazioni

spegnere

estrarre floppy

avviare.

C'è un solo problema che i log sono scritti in una cartella che può variare da impianto a impianto.

Quindi se trovo un comando che va a cercare i log, con una riga di programma risolvo il problema per sempre.

Nota: il realtà il log è contenuto in una sotto cartella:

c:\programma\temp1\*.log

oppure

c:\programma\paolo\*.log

oppure

c:\programma\pluto\*.log

l'unica parte fissa è

c:\programma\

Saluti.

Alessandrof

Link to post
Share on other sites
nll

Puoi ancora utilizzare un sistema che avevo adottato anni fa, che prevede la creazione volante di un file batch, l'editazione, anche con l'aiuto delle variabili d'ambiente e la cancellazione dei files uno per uno, il tutto col lancio di un solo file batch.

Il trucchetto è

crea un file con l'elenco dei files da eliminare, completo di percorso, ma ripulito di ogni altra informazione. Questo lo si realizza scrivento nel batch file questa riga:

 dir *.log /B /S>DelFilesLog.bat 

il file creato può avere qualunque nome, ma l'estensione deve essere "*.bat", per poterlo lanciare dopo la successiva elaborazione.

Mi raccomando, l'indirizzamento dell'output deve essere con un solo carattere di "maggiore", perché è necessario che l'elenco sia aggiornato, se metti due caratteri "maggiore" effettui l'accodamento del nuovo output ad uno eventualmente preesistente.

Poi puoi agire in due modi, o elabori un ciclo "for" che al prefisso "del " accoda una riga per volta prelevata dall'elenco, e la esegue, oppure fai l'inserimento della stringa "del " davanti a ciascuna riga del file DelFilesLog.bat e al termine mandi in esecuzione detto file batch.

La cosa è possibile, anche se al momento dovrei riprendere il manuale del dos per rinfrescarmi la sintassi del comando per estrarre una riga per volta da un file ed effettuarne la sostituzione sino a fine file. Avevo realizzato un menù in dos per far partire degli applicativi, facendo una ricerca dei files "*.exe", presentarli a video e permettere all'utente di digitare il numero corrispondente per far partire l'applicativo desiderato.

La stessa cosa la realizzi facilmente con vari linguaggi di programmazione, creandoti il tuo bell'eseguibile che fa le cose che ti ho descritto sopra.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...