Newsgroup: it.comp.lang.visual-basic
Titolo: Cartelle vuote

Buongiorno a tutti.
Un amico mi ha dato questo script
set fso = createobject("scripting.filesystemobject")
Set filetxt = fso.CreateTextFile("Size", True)
If Not fso.FolderExists("C:\Vuote") then
fso.CreateFolder("C:\Vuote")
End If
set folder = fso.getfolder("c:\windows\temp")
for each subfolder in folder.subfolders
filetxt.WriteLine subfolder.path &">>>"&  subfolder.size
if  subfolder.size=0 then
Msgbox 
subfolder.name
fso.MoveFolder 
subfolder.name
, " C:\Vuote\"
end if
next
''''''''''''''''''fso.DeleteFolder("C:\Vuote")
per l'eliminazione controllata delle cartelle vuote.
Per fare delle prove,
ho creato alcune cartelle vuote in C:\Windows\Temp
ma quando lo lancio, mi da il seguente errore:
Numero riga 11
Categoria: Microsoft VBScript runtime error
Descrizione: Path not found
Apparentemente lo script sembra corretto.
Non essendo per nulla esperto,
non so come risolvere il problema.
Qualcuno mi puņ aiutare, per favore?
Grazie!
Zio Gerry

 fso.MoveFolder 
subfolder.name
, " C:\Vuote\"
Questo script non fa altro che muovere le cartelle vuote in una cartella nel
C:, chiamata appunto C:\vuote\, dopodiché elimina l'intera cartella.
Non avendo questa tua cartella sul C:\, ti dà errore di path inesistente.
Suggerimento:
ogni volta che trovi una cartella vuota ne memorizzi il path in una tua
collection, dopodiché alla fine del controllo delle cartelle cicli la
collection e per ogni path memorizzato chiami la fso.DeleteFolder
passandogli il path come parametro.
Ciao
Zephiross

 passandogli il path come parametro.
Grazie della risposta,
ma la cartella “C:\vuote” esiste.
La crea (se ancora non esiste)
lo script alla terza e quarta riga.
L’errore “Path not found” lo dà all’11a riga,
quella con scritto:
fso.MoveFolder 
subfolder.name
, "C:\Vuote\"
Ho tolto lo spazio che c’era subito dopo
le virgolette “ C:\Vuote\”
ma l’errore permane.
Grazie lo stesso, Zephiross!
Ciao!
Zio Gerry

 fso.MoveFolder 
subfolder.name
, "C:\Vuote\"
Qui usa 
subfolder.name
, se non sbaglio questa proprietà ti restituisce il
nome della cartella, non il suo percorso sul disco.
Prova ad usare subfolder.path: dovrebbe restituire il percorso completo...
vado a memoria, non ho quasi mai usato il FileSystemObject.
Spero di esserti stata d'aiuto.
Ciao
Zephiross

 fso.MoveFolder 
subfolder.name
, " C:\Vuote\"
'''''''''errore >> " C:\Vuote\"     >>>>> "C:\Vuote\"
''''''''''''on error resume next
'togliere il commento sopra ('''''''''''')  per bypassare
'l'eventuale errore di  file gia esistente (si puo' gestire)
set fso = createobject("scripting.filesystemobject")
Set filetxt = fso.CreateTextFile("Size", True)
If Not fso.FolderExists("C:\Vuote") then
fso.CreateFolder("C:\Vuote")
End If
set folder = fso.getfolder("c:\windows\temp")
for each subfolder in folder.subfolders
filetxt.WriteLine subfolder.path &">>>"&  subfolder.size
if  subfolder.size=0 then
Msgbox 
subfolder.name
fso.MoveFolder 
subfolder.name
, "C:\Vuote\"
end if
next
''''''''''''''''''fso.DeleteFolder("C:\Vuote")
--
Fosco

"Zio Gerry"
http://www.microsoft.com/downloads/details.aspx?FamilyId=01592C48-207D-4BE1-8A76-1C4099D7BBB9&displaylang=en
http://download.microsoft.com/download/winscript56/Install/5.6/W982KMeXP/EN-US/scrdoc56en.exe
(tuttosuunarigasenononfungecopiaincollaunpezzopervolta)
Download and install WSH 5.6 from here:
http://msdn.microsoft.com/downloads/list/webdev.asp
on error resume next
'togliere il commento sopra ('''''''''''')  per bypassare
'l'eventuale errore di  file gia esistente (si puo' gestire)
set fso = createobject("scripting.filesystemobject")
Set filetxt = fso.CreateTextFile("Size", True)
If Not fso.FolderExists("C:\Vuote") then
fso.CreateFolder("C:\Vuote")
End If
set folder = fso.getfolder("c:\windows\temp")
for each subfolder in folder.subfolders
filetxt.WriteLine subfolder.path &">>>"&  subfolder.size
if  subfolder.size=0 then
Msgbox 
subfolder.name
fso.MoveFolder 
subfolder.name
, "C:\Vuote\"
end if
next
set folder = fso.getfolder("C:\Vuote")
for each subfolder in folder.subfolders
if  subfolder.size=0 then
Msgbox 
subfolder.name
else
Msgbox "ATTENZIONE non vuota  " & 
subfolder.name
End if
next
' togliere il commento qui sotto per eliminare anche
' la cartella c:\vuote


Grazie per le risposte.
Il problema l'ho risolto mettendo lo script
direttamente nella cartella interessata.
Non controlla comunque le sottocartelle,
nel senso che se ho una ramificazione
di sottocartelle del tipo "vuota1>piena>vuota2",
la "vuota2" non la cancella.
Ciao.
Zio Gerry

 Non controlla comunque le sottocartelle [cut]
Dovrebbe essere fattibile .. oltre ad andare nei link
provo a postarti uno script generico che si occupa di
subfolders
 (non ricordo l'autore dello script solo un generico Rob)
Option Explicit
   Dim oFSO           ' File System Object.
   Dim sLocalPath    ' Path to users profile directory.
   Dim oFolder         ' Folder Object.
   Dim oShell            ' Shell Object.
' Point sLocalPath to your Content.IE5 directory -- in my particular case,
' it's a hidden directory.
sLocalPath = oShell.ExpandEnvironmentStrings("%USERPROFILE%")
sLocalPath = sLocalPath & "\Local Settings\Temporary Internet
Files\Content.IE5"
If oFSO.FolderExists(sLocalPath) Then
        '    Assign the cache folder to an object and clean it out.
        Set oFolder = oFSO.GetFolder(sLocalPath)
        Call CleanCache(oFolder, sLocalPath)
End If
Wscript.Quit(0)
'***************************************************************************
*'
Public Sub CleanCache(oFolder, sLocalPath)
' Searches through the passed folder for subfolders and attempts to delete.
On Error Resume Next
   Dim oSubFolder
   ' Since we can't delete the whole Content.IE5 directory and replace it,
   ' search recursively for folders and delete those instead.
   If Not (oFolder.Path = sLocalPath) Then
      oFSO.DeleteFolder(oFolder.Path)
   End If
   For Each oSubFolder In oFolder.SubFolders
      Call CleanCache(oSubFolder, sLocalPath)
   Next
End Sub
--
Fosco