View Full Version : [VBS] come trovare files txt vuoti in un folder
Ciao a tutti,
vorrei far girare il file bat o vbs in modo da controllare all'interno di una cartella se esistono dei file txt vuoti ad esclusione del file pippo.txt.
Questo poi dovrebbe inviare un'email indicando il file vuoto.
Per l'invio dell'email potrei usare clemail.exe , ma ora soffermiamoci su file vbs o bat.
per la scansione ho un vbs che mi elimina il file vuoto :
'prepara l'oggetto filesystem
Set objFS = CreateObject("Scripting.FileSystemObject")
'prepara il file da controllare
Set objFile = objFS.GetFile("C:\Documents and Settings\Desktop\Nuova cartella\FileDaControllare.txt")
' Se la dimensione del file e' zero allora cancellalo
If objFile.Size = 0 then objfile.delete
'Fine dello script
wsh.quit
ma invece di cancellarlo vorrei che mi indicasse i files txt vuoti senza cancellarli.
chi mi può dare una mano ?
Nessuno sa darmi una dritta?
magari come leggere i files in un specifico folder ?
come scrivere il risultato in un file txt ?
anche un pezzo alla volta , magari qualcuno può aiutarmi su quel che sà .
anche che non sia vbs, l'importate è arrivare al risultato.
Scusate ma è importante. Grazie mille
in vba si fa con 7 istruzioni. :cool:
vedi Dir ;)
in vba si fa con 7 istruzioni. :cool:
vedi Dir ;)
quali sono le sette istruzioni ?
ad esempio per iniziare , per scrivere un file ho usato questo :
Private Sub Form_Load()
Open "C:\Documents and Settings\giak\Desktop\Nuova cartella\esempio.txt" For Append As #1
Print #1, "Hello, World!"
Close #1
End Sub
ma non mi crea niente ?
Grazie mille per l'aiuto!!
ma si può richiamare un file vbs all'interno di un file vbs ?
Sub aaa()
'do il nome al file dove memorizzo l'elenco
filename = "elenco.txt"
Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")
Path$ = .Range("C:\Documents and Settings\pippo\Desktop\Nuova cartella ")
NomeFile$ = Dir(Path$ & "\*.txt")
Set objFile = objFS.GetFile(NomeFile$)
Do Until NomeFile$ = ""
If objFile.Size = 0 then
Set MyFile = ScriptObject.CreateTextFile(("C:\Documents and Settings\pippo\Desktop\Nuova cartella " & filename)
MyFile.Write chr(Asc(Mid(NomeFile$)))
Loop
End With
MyFile.Close
End Sub
E' corretto ?
ma vuoi salvare l'elenco dei file desiderati (p.es. file *.txt vuoti) in un file ?
lo puoi fare sempre da vba.
vuoi mandare una mail con allegato il file degli elenchi ?
anche questo lo puoi fare sempre da vba.
excel lo puoi considerare come una (super) interfaccia grafica di VB.
non vuoi usare vba ma un vbs ?
penso che se prendi il codice vba e lo trapianti nel tuo ambiente vbs funzioni paro paro.
per esempio (ma ci sono anche altri metodi)
Metodo SendMail
Invia la cartella di lavoro tramite il sistema di posta elettronica installato.
Sintassi
espressione.SendMail(Recipients, Subject, ReturnReceipt)
espressione Argomento necessario. Un'espressione che restituisce un oggetto Workbook.
Recipients Argomento necessario di tipo Variant. Specifica il nome del destinatario sotto forma di testo o di matrice di stringhe di testo se esistono più destinatari. È necessario specificare almeno un destinatario. Tutti i destinatari vengono aggiunti nella casella A del messaggio.
Subject Argomento facoltativo di tipo Variant. Specifica l'oggetto del messaggio. Se non è specificato, verrà utilizzato il nome del documento.
ReturnReceipt Argomento facoltativo di tipo Variant. Se ha valore True, verrà richiesta la ricevuta di ritorno. Se ha valore False, non verrà richiesta la ricevuta di ritorno. Il valore predefinito è False.
Grazie, ma ho capito che con vba o vbs puoi fare quello che vuoi.
Al momento però mi interessa sapere :
- se il codice che ho scritto è giusto
- eventualmente cosa ho sbagliato
- magari se mi spieghi pure qualcosina te ne sarei grato
per la spedizione devo utilizzare clemail in quanto il server non dispone di outlook o thunderbird . il file devo scedularlo con i task di winzoz di notte in modo da aver la mattina seguente la situazione dei file vuoti presenti nel folder via email
vorrei far girare il file bat o vbs in modo da controllare all'interno di una cartella se esistono dei file txt vuoti ad esclusione del file pippo.txt.
Se puoi farne a meno e hai a portata di mano un Word o Excel, direi che in VBA è pratico e leggibile. Poi puoi riadattare a VBS, se proprio devi :
'Aggiungere Rif. a Microsoft Scripting Runtime
Dim FSO As Scripting.FileSystemObject
Set FSO = New Scripting.FileSystemObject
Dim nomeCartella As String
nomeCartella = ThisWorkbook.Path & "\"
Dim cartella As Scripting.Folder
Set cartella = FSO.GetFolder(nomeCartella)
Dim report As Scripting.TextStream
Set report = FSO.CreateTextFile(nomeCartella & "report.txt", True)
Dim ctrlNome As Boolean
Dim F As Scripting.File
For Each F In cartella.Files
If F.Name = "pippo.txt" Or F.Name = "report.txt" Or Right(F.Name, 4) <> ".txt" Then
ctrlNome = False
Else
ctrlNome = True
End If
If ctrlNome = True And F.Size = 0 Then report.WriteLine F.Name & " è un file di testo vuoto."
Next F
In questo caso cerca tutti i ".txt" vuoti nella stessa cartella del WorkBook Excel da cui viene lanciato. Crea un file "report.txt" ed esclude "pippo.txt" e "report.txt" da successive ricerche. ;)
già fatto. arrivi sempre tardi e sempre più lento. :D
già fatto. arrivi sempre tardi e sempre più lento. :D
Eh, che ci vuoi fare, vedrò di darmi una regolata. :rotfl:
Se puoi farne a meno e hai a portata di mano un Word o Excel, direi che in VBA è pratico e leggibile. Poi puoi riadattare a VBS, se proprio devi :
In questo caso cerca tutti i ".txt" vuoti nella stessa cartella del WorkBook Excel da cui viene lanciato. Crea un file "report.txt" ed esclude "pippo.txt" e "report.txt" da successive ricerche. ;)
Ciao, grazie mille per il tuo aiuto!
ho provato ad inserirlo all'interno di un file excel, ma mi genera questo errore :
Errore di compilazione: non valido all'esterno di una routine ( Set FSO = New Scripting.FileSystemObject )
ma creando un file excel con macro, poi come faccio a lanciarlo con i task di winzoz e far girare la macro e poi chiudere l'excel ? con un file vbs ci sono riuscito.
Ciao, grazie mille per il tuo aiuto!
ho provato ad inserirlo all'interno di un file excel, ma mi genera questo errore :
Errore di compilazione: non valido all'esterno di una routine ( Set FSO = New Scripting.FileSystemObject )
Perchè evidentemente l'hai messo fuori da una routine.
Inoltre ho chiaramente indicato che devi aggiungere al progetto un Riferimento alla libreria "Microsoft Scripting Runtime". In quel modo puoi costruire tutti gli oggetti FileSystem dalla libreria e usufruire degli aiuti e suggerimenti dell'intellisense VBE.
Cosa invece non possibile richiamando la libreria in questo modo :
Set FSO = CreateObject("Scripting.FileSystemObject")
ma creando un file excel con macro, poi come faccio a lanciarlo con i task di winzoz e far girare la macro e poi chiudere l'excel ? con un file vbs ci sono riuscito.
E VBS sia !
Questa è la versione VBS del mio VBA precedente :
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
Dim nomeCartella
nomeCartella = "C:\Prova\"
Dim cartella
Set cartella = FSO.GetFolder(nomeCartella)
Dim report
Set report = FSO.CreateTextFile(nomeCartella & "report.txt", True)
Dim ctrlNome
Dim F
For Each F In cartella.Files
If F.Name = "pippo.txt" Or F.Name = "report.txt" Or Right(F.Name, 4) <> ".txt" Then
ctrlNome = False
Else
ctrlNome = True
End If
If ctrlNome = True And F.Size = 0 Then report.WriteLine F.Name & " è un file di testo vuoto."
Next
Prova... ;)
Se puoi farne a meno e hai a portata di mano un Word o Excel, direi che in VBA è pratico e leggibile. Poi puoi riadattare a VBS, se proprio devi :
'Aggiungere Rif. a Microsoft Scripting Runtime
Dim FSO As Scripting.FileSystemObject
Set FSO = New Scripting.FileSystemObject
Dim nomeCartella As String
nomeCartella = ThisWorkbook.Path & "\"
Dim cartella As Scripting.Folder
Set cartella = FSO.GetFolder(nomeCartella)
Dim report As Scripting.TextStream
Set report = FSO.CreateTextFile(nomeCartella & "report.txt", True)
Dim ctrlNome As Boolean
Dim F As Scripting.File
For Each F In cartella.Files
If F.Name = "pippo.txt" Or F.Name = "report.txt" Or Right(F.Name, 4) <> ".txt" Then
ctrlNome = False
Else
ctrlNome = True
End If
If ctrlNome = True And F.Size = 0 Then report.WriteLine F.Name & " è un file di testo vuoto."
Next F
In questo caso cerca tutti i ".txt" vuoti nella stessa cartella del WorkBook Excel da cui viene lanciato. Crea un file "report.txt" ed esclude "pippo.txt" e "report.txt" da successive ricerche. ;)
Puoi convertirlo per vbs ?
sono arrivato a questo punto :
Dim report,fso, folder, testfile, elemFolder
set fso= CreateObject("Scripting.FileSystemObject")
folder=fso.getfolder(""C:\Documents and Settings\pippo\Desktop\Nuova cartella")
set report = CreateObject("Scripting.FileSystemObject")
Set testfile = report.CreateTextFile("C:\Documents and Settings\pippo\Desktop\Nuova cartella\report.txt", True)
testfile.write "( elementi presenti in nuovacartella diversi da pippo o report"
testfile.Close
Ti ho già postato il codice VBS... :mbe: :D
Ti ho già postato il codice VBS... :mbe: :D
Scusa non avevo visto, grazie mille!!!!!!!:D
Scusa non avevo visto, grazie mille!!!!!!!:D
Beh, problema risolto allora. Allelujah ! :D
Purtroppo per voi sono ancora qui :D
scusate ma ho un altro quesito . Ho inserito questa stringa :
Dim ws
Set ws = WScript.CreateObject("WScript.Shell")
Wscript.Sleep 1500
ws.Run CHR(34)& "C:\Documents and Settings\pippo\Desktop\Nuova cartella\sendemail.exe -s smtp.fastwebnet.it -f pippo@gmail.com -t pippo@gmail.com -u ciao -m ciao -a report.txt" & CHR(34)
non funziona ( lanciando l'exe da cmd invece tutto ok )
Ho sbagliato qualcosa? :mbe:
risolto con :
ws.Run CHR(34)& "C:\Documents and Settings\pippo\Desktop\Nuova cartella\sendemail.exe" & CHR(34) & "-s smtp.fastwebnet.it -f pippo@gmail.com -t pippo@gmail.com -u" & body & " -m ciao -a report.txt"
però adesso sorge un altro problema : nei parametri -u passo body però questo deve conterere un breve testo compreso di "".
chiaramente se faccio
Dim body
body = " "questa è una prova" "
non funziona. come posso fare ?
""" Questa è una prova """
;)
Grazie mille !!:D :D :D
Un'ultima cosa : come posso fare per andare a capo come nell'esempio:
Questa è una email di prova.
Cordiali saluti.
utilizzando sempre body ?
Puoi crearti una variabile stringa che contiene tutto il messaggio, concatenandone i pezzi tutte le volte che vuoi andare a capo, mediante VbCrLf ( costante VB che sta per "VB-Cursor-Left" ), e poi la dai in pasto al body del messaggio :
Dim stringa
stringa = "Questa è una email di prova." & VbCrLf & "Cordiali saluti."
;)
Puoi crearti una variabile stringa che contiene tutto il messaggio, concatenandone i pezzi tutte le volte che vuoi andare a capo, mediante VbCrLf ( costante VB che sta per "VB-Cursor-Left" ), e poi la dai in pasto al body del messaggio :
Dim stringa
stringa = "Questa è una email di prova." & VbCrLf & "Cordiali saluti."
;)
Mitico!!:D :D
Grazie mille !!;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.