Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
[batch] deve eliminare file
Nuovo argomento   Rispondi    Indice del forum -> Programmazione
Precedente :: Successivo  
Autore Messaggio
ashasysley
Mortale devoto
Mortale devoto


Registrato: 11/09/06 15:07
Messaggi: 7

MessaggioInviato: 11 Set 2006 16:26    Oggetto: [batch] deve eliminare file Rispondi citando

Salve a tutti. Sono nuova e ho trovato il Vs interessante forum da dove poter "rubare" informazioni.
Volevo una mano su:

Debbo creare un batch che partirà con un'operazione pianificata di windows.
Questo batch deve:

entrare dentro una cartella che contiene:

040101pippo.zip 01/01/2004
040101mamma.zip 01/01/2004
040101ciccia.zip 01/01/2004
041122pippo.zip 22/11/2004
041122mamma.zip 22/11/2004
041122ciccia.zip 22/11/2004
041225pippo.zip 25/12/2004
041225mamma.zip 25/12/2004
041225ciccia.zip 25/12/2004


che sono file di backup che vengono creati giornalmente.
Debbo: cancellare tutti quei file che hanno la data più vecchia.
nell'esempio verranno cancellati i file PIPPO - MAMMA e CICCIA della data 25/12/2004 e verranno mantenuti gli altri.

Mi sto incartando con le date e tutto il resto ... potete aiutarmi?

grazie mille.

Ash
Top
Profilo Invia messaggio privato Yahoo MSN
chemicalbit
Dio maturo
Dio maturo


Registrato: 01/04/05 17:59
Messaggi: 18597
Residenza: Milano

MessaggioInviato: 11 Set 2006 22:42    Oggetto: Rispondi citando

Con un semplice file batch non mi pare si possa fare.

Forse si può fare usando delle estensioni che sono introdotte da progrmmi di terze parti (4DOS) o dalle ultime versioni del DOS/prompt dei comandi (via via in win95 e successivi).

Dovrei vedere. (se fosse "solo i file più vecchi della data gg/mm/aaaa" si potrebeb fare con quelle estensioni. Ma trovare il più vecchio .... mumble mumble Think )

forse fai prima ad usare un programmino apposito
(o a crearlo tu, ma non con un file batch, con un linguaggio di programmazione vero e proprio)
Top
Profilo Invia messaggio privato
ashasysley
Mortale devoto
Mortale devoto


Registrato: 11/09/06 15:07
Messaggi: 7

MessaggioInviato: 12 Set 2006 08:43    Oggetto: numble ... Rispondi citando

Nei tuoi cassetti c'è nulla che fa per me?
C'è qualche programmino affidabile che mi cancelli i file facendo il paragone fra quelli che ci sono e prendendo il più vecchio?
Deve eseguire questa operazione ciclicamente.

Esiste un programma del genere?

Kiss Ash
Top
Profilo Invia messaggio privato Yahoo MSN
ashasysley
Mortale devoto
Mortale devoto


Registrato: 11/09/06 15:07
Messaggi: 7

MessaggioInviato: 12 Set 2006 08:45    Oggetto: Rispondi citando

Aspetta ...
A me andrebbe anche bene:

Data di oggi - 2 gg = data X

Tutti i file più vecchi della data X

Mi andrebbe anche bene così ... Tanto devo solo conservare uno storico di 2 gg addietro alla data di oggi ...

E' più semplice così?
Top
Profilo Invia messaggio privato Yahoo MSN
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11568
Residenza: Tokelau

MessaggioInviato: 15 Set 2006 16:30    Oggetto: Rispondi citando

se fai sempre il backup di 3 file e non fai più di un backup al giorno allora ti potrebbe andare bene uno script che cancelli tutti i file TRANNE i 6 più recenti, vero? Smile

Codice:
set CARTELLA=D:\dati\la-tua-cartella
for /F "skip=6 tokens=*" %i IN ('dir %CARTELLA% /b /t:c /o-d') do del %CARTELLA%\%i


in pratica con
dir /b /t:c /o-d
ottengo la lista dei file ordinati con i più recenti in alto. Poi li cancello ad uno ad uno MA saltando i primi 6, infatti nel for c'è scritto "skip=6" Smile

con Win2k/WinXP dovrebbe funzionare...
Top
Profilo Invia messaggio privato HomePage
chemicalbit
Dio maturo
Dio maturo


Registrato: 01/04/05 17:59
Messaggi: 18597
Residenza: Milano

MessaggioInviato: 15 Set 2006 17:35    Oggetto: Rispondi citando

Surprised
Uhm ... ne ha fatti di passi in avanti lo scripting batch, dal DOS 5.0

Mi sa che mi conviene rimetermi a studiare,
però a qeustopunto non so se mi convenga piuttosto studiare un altro linguaggio di programmazione (vero e proprio). Think
Top
Profilo Invia messaggio privato
GrayWolf
Dio maturo
Dio maturo


Registrato: 03/07/05 16:24
Messaggi: 2325
Residenza: ... come frontiera i confini del mondo...

MessaggioInviato: 17 Set 2006 10:12    Oggetto: Rispondi

non è uno script DOS... ma funziona Wink

Codice:

' VB Script Document
'************************************************************
'*            CANCELLAZIONE SELETTIVA DI FILES
'*         CON DATA INFERIORE A QUELLA DESIDERATA
'************************************************************
option explicit

  dim objArgs
  dim oFSO
  dim oFolder
  dim oFiles
  dim oFile

  dim sList
  dim sNomeCartella
  dim sNomeFile
  dim sData
  dim sTmp
  dim sMask
  dim sInput
  dim sGiorniNotDelete
  dim sDel
  dim sConf
  dim sArg

  dim avList
  dim avDel

  dim i
  dim a


  dim sMsg
  dim lIco
  dim sTit


'* -------------------------------------------------------------
'* INTERVENTO:
'*
'* impostare i campi sData con i valori occorrenti
'* esempio:
'*        sData = now         imposta la data del giorno
'*        sData = "1/9/2006"  imposta il primo settembre
'*
'* importante: se si esprime una data DEVE essere
'*             nella forma gg/mm/aaaa e racchiusa fra apici doppi

  sData = now

'* impostare il numero di giorni PRIMA dei quali lo script
'* deve effettuare la cancellazione
'* esempio:
'*
'* con sData = "1/9/2006" e  sGiorniNotDelete = 2
'* saranno cancellati tutti quei files che come ultima modifica
'* o creazione hanno data antecedente al 30/8/2006

  sGiorniNotDelete = 2

'*
'*
'* -------------------------------------------------------------

  Set oFSO = CreateObject("Scripting.FileSystemObject")
  Set objArgs = Wscript.Arguments

  sInput = ""
  if objargs.count > 0 then
    for a = 0 to objargs.count -1
      if a = 0 then
        sInput = sInput & objargs(a)
      else
        sInput = sInput & " " & objargs(a)
      end if
    next
  else
    do
      sInput = inputbox("Immettere il nome" _
                        & vblf _
                        & " della cartella con i files da cancellare" _
                        ,"RICHIESTA" _
                        ,sInput _
                       )
      if len(trim(sInput)) = 0 then
        select case msgbox("premuto annulla o risposta vuota " _
                 & vblf _
                 & "chiudere il programma?" _
                 ,vbquestion+vbYesNo _
                 , "RICHIESTA" _
                )
          case vbYes
            WScript.quit
          case vbNo
           '* ripete la richiesta
        end select
      end if
    loop until len(trim(sInput)) > 0
  end if
  sNomeCartella = sInput
  if not right(sNomeCartella,1) = "\" then
    sNomeCartella = sNomeCartella & "\"
  end if
  sList = ListaContenuti(sNomeCartella)
  avList = split(sList,vblf)


  sTmp = ""
  sDel = ""
  sConf = day(sData) _
        & "/" _
        & month(sData) _
        & "/" _
        & year(sData)

  for i = 0 to ubound(avList)
    if len(avList(i)) > 0 then
      sArg = left(avList(i),instr(AvList(i), chr(160))-1)
      if datediff("d",sArg , sConf) > sGiorniNotDelete then
        sTmp = sTmp _
             & right(avList(i),len(avList(i))-instrrev(AvList(i),chr(160))) _
             & " (" _
             & sArg _
             & ")" _
             & vblf
        sDel = sDel _
             & sNomeCartella _
             & right(avList(i),len(avList(i))-instrrev(AvList(i),chr(160))) _
             & vblf
      end if
    end if
  next


 
'* -------------------------------------------------------------
'* INTERVENTO:
'*
'* se si desidera che lo script elenchi i files che saranno
'* cancellati chiedendo conferma dell'operazione,
'* eliminare l'apice a inzio riga alle istruzioni sottostanti
'* comprese fra le due righe di trattini
'* -------------------------------------------------------------
'  select case msgbox("Files da cancellare:" _
'                     & string(2,vblf) _
'                     & sTmp _
'                     & string(2,vblf) _
'                     & "Procedo alla cancellazione ?" _
'                     ,vbYesNo + VbQuestion _
'                     ,"RICHIESTA" _
'                    )
'    case vbYes
'     '* prosegue e cancella
'    case vbNo
'     '* esce
'      WScript.quit
'  end select
'* -------------------------------------------------------------
'*


  avDel = split(sDel,vblf)
  if ubound(avDel) = -1 then
    sMsg = "non ci sono files da cancellare"
    lIco = vbInformation
    sTit = "INFO"
    msgbox sMsg,lIco,sTit
  else
    for i = 0 to ubound(avDel)
      if len(avDel(i)) > 0 then
        oFSO.deletefile(avDel(i))
      end if
    next
  end if
  wScript.quit

'* =========================================================
  Function ListaContenuti(folderspec)
    Set oFolder = oFSO.GetFolder(folderspec)
    Set oFiles = oFolder.Files
    For Each oFile in oFiles
      sTmp = sTmp _
           & day(oFile.datelastmodified) _
           & "/" _
           & month(oFile.datelastmodified) _
           & "/" _
           & year(oFile.datelastmodified) _
           & chr(160) _
           & oFile.name
      sTmp = sTmp _
           & vblf
    Next
    ListaContenuti = sTmp
  End Function
'* =========================================================


salvare il codice soprastante in un file con l'estensione .vbs

Lo script accetta come parametro la cartella in cui ci sono files da cancellare
NOTA: il nome della cartella può conenere spazi
Se non è comunicato il nome della cartella avviene la sua richiesta.

Metodi di funzionamento:
-- richiamo da DOS con o senza nome di cartella
-- richiamo da operazioni pianificate con il nome di cartella come parametro
-- creando uno shortcut (collegamento) dello script sul desktop e trascinando sopra di esso, la cartella interessata.
-- ponendo lo shortcut in esecuzione automatica con il nome di cartella come parametro

Personalizzazione:
vedere i punti in cui il commento è identificato dalla parola INTERVENTO

Funziona su Win200 e WinXP

edit by GrayWolf
vorrei precisare che i files sono cancellati definitivamente e non attraverso il cestino.
Non essendo più recuperabili consiglio di effettuare almeno la prima esecuzione su una cartella di prova.
Quando attivato definitivamente, controllare molto bene il nome della cartella passato come parametro.
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi