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
* cancellazione automatica dei file vetusti
Nuovo argomento   Rispondi    Indice del forum -> Windows XP e Reperti Archeologici
Precedente :: Successivo  
Autore Messaggio
GrayWolf
Dio maturo
Dio maturo


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

MessaggioInviato: 28 Ago 2008 12:14    Oggetto: Rispondi citando

tabac ha scritto:
Ancora una domanda.
Ma se io oltre ai files volessi anche cancellare delle sottodirectory presenti nella directory specificata seguendo sempre la stessa logica?


ecco qua
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

'* JK 28.8.2008 >>>>>>>>>>>>>>>>>
  dim oSubFolders
  dim oSubFolder
'* <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

  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 bDelSubDir


  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 = 0

'* JK 28.8.2008 >>>>>>>>>>>>>>>>>
'*
'* impostare a true se si desidera che siano cancellate anche le
'* sottocartelle [presenti nella  cartella indicata]  con  TUTTO
'* il loro contenuto.
'* impostare a false se le sottocartelle  devono  rimanere  e si
'* desidera la sola cancella zione dei files.
'*
'* ATTENZIONE:
'* .1 i contenuti delle sottocartelle  NON  saranno visualizzati
'* .2 la cancellazione avverrà solo se corrisponde ai criteri di
'*    cancellazione: data di creazione - numero di giorni [impo-
'*    stato in sGiorniNotDelete]

  bDelSubDir = true

'*
'*
'* <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
'* -------------------------------------------------------------

  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 = ListaFiles(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 inizio 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


'* JK 28.8.2008 >>>>>>>>>>>>>>>>>
  if bDelSubDir then
    sList = ListaSubDirs(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 le sottocartelle che sa-
'* ranno cancellate, chiedendo conferma dell'operazione,
'* eliminare l'apice a inizio riga alle istruzioni sottostanti
'* comprese fra le due righe di trattini
'* -------------------------------------------------------------
'    select case msgbox("Sottocartelle 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 sottocartelle da cancellare"
      lIco = vbInformation
      sTit = "INFO"
      msgbox sMsg,lIco,sTit
    else
      for i = 0 to ubound(avDel)
        if len(avDel(i)) > 0 then
          oFSO.deletefolder(avDel(i))
        end if
      next
    end if
  end if
'* <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

  WScript.quit

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

'* JK 28.8.2008 >>>>>>>>>>>>>>>>>
'* =========================================================
  Function ListaSubDirs(folderspec)
    Set oFolder = oFSO.GetFolder(folderspec)
    Set oSubFolders = oFolder.subFolders
    sTmp = ""
    For Each oSubFolder in oSubFolders
      sTmp = sTmp _
           & day(oSubFolder.datelastmodified) _
           & "/" _
           & month(oSubFolder.datelastmodified) _
           & "/" _
           & year(oSubFolder.datelastmodified) _
           & chr(160) _
           & oSubFolder.name
      sTmp = sTmp _
           & vblf
    Next
    ListaSubDirs = sTmp
  End Function
'* =========================================================
'* <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<


lo script è lo stesso del precedente con l'aggiunta della possibilità di cancellazione anche delle sottocartelle nella cartella indicata
[vedi l'aggiunta nel primo punto di intervento]




per il resto valgono tutte le regole già indicate [che riporto per completezza]

Citazione:

salvare il codice soprastante tramite copia incolla 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

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.


consiglio vivamente due copia incolla:
uno per il codice
uno per la citazione [istruzioni]


una piccola precisazione:
con sGiorniNotDelete = 0 sono cancellati files e cartelle
create nello stesso giorno a cui fa riferimento il valore espresso in sData
Top
Profilo Invia messaggio privato
tabac
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 10/04/07 14:19
Messaggi: 106

MessaggioInviato: 22 Ott 2008 09:59    Oggetto: Rispondi citando

caro graywolf

tutto mi funziona a meraviglia ma se volessi ancora una miglioria?

Impostare la cartella su cui lavorare a priori senza chiederlo all'utente ogni volta all'avvio del .vbs.


grazie 1000, anzi 100000
Top
Profilo Invia messaggio privato
tabac
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 10/04/07 14:19
Messaggi: 106

MessaggioInviato: 22 Ott 2008 11:56    Oggetto: Rispondi citando

Mi sono risposto da solo provandoci.

Ho anteposto l'apice a tutta la parte che richiede l'immissione della cartella ed ho forzato snomecartella alla cartella che mi serve

Scusa il disturbo gray wolf
Top
Profilo Invia messaggio privato
GrayWolf
Dio maturo
Dio maturo


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

MessaggioInviato: 23 Ott 2008 20:54    Oggetto: Rispondi citando

nessun disturbo, hombre Smile

ma...

se vuoi rendere generalizzato lo script puoi fare in questo modo:


  1. togli l'apice alle righe di richiesta
  2. togli l'impostazione fissa della cartella
  3. crei un collegamento al .vbs con il nome della cartella voluta come parametro
    esempio:
    Codice:
    u:\mia_cartella_script\mio_script.vbs cartella_da_trattare

    dove:
    Citazione:
    u: = unità nella quale mia_cartella_script
    mia_cartella_script = cartella in cui risiede lo script
    mio_script.vbs = nome che hai dato allo script
    cartella_da_trattare = il percorso completo, comprensivo del nome della cartella che lo script deve trattare


  4. nelle operazioni pianificate o dallo start o dal desktop richiami il collegamento


Perché fare ciò?
così se tu avessi una seconda cartella [principale] sulla quale operare la cancellazione dei files vetusti e delle sottocartelle, ti basterebbe duplicare il collegamento modificando il parametro Wink

PS il percorso o il nome della cartella da trattare può contenere spazi [e non c'è la necessità di racchiuderla fra apici doppi Wink Wink]
Top
Profilo Invia messaggio privato
n4b
Mortale adepto
Mortale adepto


Registrato: 22/06/07 14:14
Messaggi: 31

MessaggioInviato: 06 Nov 2008 11:00    Oggetto: Rispondi

Bravi Smile
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Windows XP e Reperti Archeologici Tutti i fusi orari sono GMT + 2 ore
Vai a Precedente  1, 2
Pagina 2 di 2

 
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