[VBscript] in elke folder iets verwijderen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • tjtristan
  • Registratie: Augustus 2005
  • Laatst online: 12-06 00:17
Ik wil alle bestanden die ouder dan 7 dagen zijn uit onlangs geopend verwijderen bij alle profielen (er vanuit gaande dat alle profielen op c:\users\ staan)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Option Explicit
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
DeleteFiles fso.GetFolder("C:\users\*\Onlangs Geopend\")
Sub DeleteFiles(srcFolder)
Dim srcFile
If srcFolder.Files.Count = 0 Then
Wscript.Echo "No File to Delete"
Exit Sub
End If
For Each srcFile in srcFolder.Files
If DateDiff("d", Now, srcFile.DateCreated) < -7 Then
fso.DeleteFile srcFile, True
End If
Next
Wscript.Echo "Files Deleted successful"
End Sub


Nou dat sterretje werkt dus niet, maar op welke manier zou ik dan kunnen aangeven dat die deze bestanden uit elk profiel verwijderd?
Ik kon hier zelf niet uitkomen. (ik programmeer dan verder ook niet, ik wilde alleen even een simpel scriptje hiervoor maken, verder komt het script ook niet van mij)
Alvast bedankt.

http://specs.tweak.to/15535


Acties:
  • 0 Henk 'm!

Verwijderd

Is het misschien niet handiger om hulp te vragen aan degene waar je de website vandaan hebt? Ik denk niet dat je zomaar regular expressions in de GetFolder functie kan gooien (maar daarvoor kun je het best kijken in de documentatie van die functie). Wat je ook kan doen is een lijst opvragen van alle mappen (dus users) die staan in C:\Users.

Verder is het handig als je ook vermeld waar je al op hebt gezocht en wat je zelf al hebt geprobeerd. Het is niet de bedoeling dat wij voor jou scriptjes gaan schrijven. ;)

Acties:
  • 0 Henk 'm!

  • tjtristan
  • Registratie: Augustus 2005
  • Laatst online: 12-06 00:17
Het script is alleen gemaakt voor bestanden van ouder dan een x aantal dagen te verwijderen uit een specifieke map.
In dat opzicht werkt het script ook gewoon goed, zelf heb ik al op erg veel trefwoorden te zoeken maar op geen enkele manier kan ik vinden hoe je uit"\elkefolder\specifiekefolder\" bestanden kan verwijderen.
Dus als iemand hier een simpele oplossing voor weet dan zou dat erg fijn zijn, wat mij enorm veel tijd zou schelen.

http://specs.tweak.to/15535


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Open de user-folder en loop door alle submappen heen.
Open in elk van die submappen weer de Onlangs Geopend-folder.
Van daaruit is het gewoon je scriptje hierboven.

Alles wat je moet doen is een loopje toevoegen. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • alt-92
  • Registratie: Maart 2000
  • Niet online

alt-92

ye olde farte

Vraag je ook af of die folder niet stiekem anders heet en dat je alleen een prettified naam ziet.

(hint: is een speciale folder, geen standaard folder en dat kun je ook zien aan de icon die er gebruikt wordt.)

[ Voor 37% gewijzigd door alt-92 op 01-09-2009 14:33 ]

ik heb een 864 GB floppydrive! - certified prutser - the social skills of a thermonuclear device


Acties:
  • 0 Henk 'm!

  • Snowbro-M
  • Registratie: September 2009
  • Laatst online: 29-10-2023
Probeer het volgende script eens. Er zijn 3 variabelen die je kunt invullen. Je begin path, de folder die je wil doorzoeken en tot slot de maximale leeftijd van een bestand.

Nu moet je alleen nog rekening houden welke leeftijd je wil uitlezen. (Bijv. de CreationDate of de LastModified date). Dit kun je in onderstaande Sub routine 'DoTheJob' aanpassen door de juiste property te selecteren. Verander het quote tekentje (') op Regel 72 en 73.


VBScript: filename
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
 

Option Explicit

Dim nbDays
Dim objFSO
Dim objTextFile
Dim strNextLine
Dim strPath
Dim strSearchFolder

strPath = "G:\Test"
strSearchFolder = "\Onlangs geopend"
nbDays = "7"     

DIM objFileSystem, objFolder, objSubFolders, objSubFolder, intOldestProfileAge

SET objFileSystem = CreateObject("Scripting.FileSystemObject")
SET objFolder = objFileSystem.GetFolder(strPath)
SET objSubFolders = objFolder.SubFolders

For EACH objSubFolder in objSubFolders
    Call DoTheJob(objSubFolder)
Next


Sub DoTheJob(strFolderName)
    dim limitDate
    dim formattedLimitDate
    dim folder
    dim strComputer
    dim objWMIService
    dim colFileList
    dim objFile
    dim nbFiles
    dim totalFiles
    dim nbErrors
    dim result
    
    folder = strFolderName & strSearchFolder

    limitDate = DateAdd("d", -1 * nbDays , Date)

    formattedLimitDate = DatePart("yyyy", limitDate)
    
    if DatePart("m", limitDate) < 10 then
     formattedLimitDate = formattedLimitDate & "0"
    end if
    formattedLimitDate = formattedLimitDate & DatePart("m", limitDate)
    
    if DatePart("d", limitDate) < 10 then
     formattedLimitDate = formattedLimitDate & "0"
    end if
    formattedLimitDate = formattedLimitDate & DatePart("d", limitDate)

    WScript.Echo "Will remove files from " & folder & " with a date older than " & formattedLimitDate & " (" & nbDays & " days ago)"

    strComputer = "."

    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

    Set colFileList = objWMIService.ExecQuery _
        ("ASSOCIATORS OF {Win32_Directory.Name='" & folder & "'} Where " _
            & "ResultClass = CIM_DataFile")

    nbFiles = 0
    totalFiles = 0
    nbErrors = 0

    For Each objFile In colFileList
        totalFiles = totalFiles + 1
        if objFile.LastModified < formattedLimitDate then
        'if objFile.CreationDate < formattedLimitDate then
            
            result = objFile.Delete()
            
         WScript.Echo objFile.Name & " - " & objFile.CreationDate & ". Delete Result: " & result
         if result = 0 then
             nbFiles = nbFiles + 1
         else
             nbErrors = nbErrors + 1
         end if
        end if
    Next

    Wscript.Echo "Total files in folder: " & totalFiles
    WScript.Echo "Deleted files:         " & nbFiles
    WScript.echo "Errors:                " & nbErrors
End Sub

Acties:
  • 0 Henk 'm!

  • tjtristan
  • Registratie: Augustus 2005
  • Laatst online: 12-06 00:17
Hartstikke bedankt Snowbro-M :D.
Ik heb wel even de echo's weggehaalt zodat het proces automatisch kan gaan, maar die waren wel handig voor het testen!

http://specs.tweak.to/15535


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
_O_ en :|
Heel fijn en netjes dat je TS zo helpt, maar hier leert TS natuurlijk niets van en feitelijk voldoe je dus aan een scriptrequest.
Give a man a fish and feed him for a day. Teach a man how to fish and feed him for a lifetime.
Probeer volgende keer TS in de juiste richting te wijzen, maar compleet voorgekauwde alles-er-op-en-eraan oplossingen zoveel mogelijk achterwege te laten (althans, als je TS écht iets wil leren) ;)

offtopic:
Waarom initialiseer je nbDays als een string als je er mee gaat rekenen? Als je 'm met de concatenatie operator ( & ) gebruikt zal VBScript alsnog casten naar string en rekenen met een string i.p.v. een int is vies (hoewel dat (helaas) ook door VBS gevreten wordt). Bad practice ;)

[ Voor 21% gewijzigd door RobIII op 01-09-2009 16:37 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • alt-92
  • Registratie: Maart 2000
  • Niet online

alt-92

ye olde farte

En dit script gaat alsnog op z'n plaat zodra je een Engelstalig OS hebt.

ik heb een 864 GB floppydrive! - certified prutser - the social skills of a thermonuclear device


Acties:
  • 0 Henk 'm!

  • tjtristan
  • Registratie: Augustus 2005
  • Laatst online: 12-06 00:17
alt-92 schreef op dinsdag 01 september 2009 @ 16:43:
En dit script gaat alsnog op z'n plaat zodra je een Engelstalig OS hebt.
Door de datum notatie of bedoel omdat er "onlangs geopend" staat?

http://specs.tweak.to/15535


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
alt-92 schreef op dinsdag 01 september 2009 @ 16:43:
En dit script gaat alsnog op z'n plaat zodra je een Engelstalig OS hebt.
Er wordt netjes gebruik gemaakt van de (Locale aware) functie DatePart etc. dus daar zie ik geen probleem in (of ik zie ergens een regel over 't hoofd). Edit: Oh wacht... regel 71 :X Dan gaat 't hooguit mis (op anderstalig OS-vlak dan) op de paden idd.

Overigens had ik, i.p.v. telkens DatePart te gebruiken, waarschijnlijk eerder naar Month(), Day() en Year() gegrepen, maar dat is potatoes != potatoes.

Edit:
Oh wacht, bij nadere inspectie mankeert er nog wel het 1 en ander aan; ik zie even niet waarom na de dateadd alles naar een string geconverteerd moet worden terwijl het al een datum is (dateadd returned een datum) en daarna een string met datum gecompared wordt op regel 71 :X

En het formatteren van yyyymmdd kan 100x makkelijker:
VBScript:
1
2
3
dtWhen = Date

formatteddate = Year(dtWhen) & Right("0" & Month(dtWhen),2) & Right("0" & Day(dtWhen),2)

formatteddate bevat dan "20090901". Scheelt nogal wat code :P

Hoe dan ook; TS leert waarschijnlijk meer bad practices en buggy programmeren van dit script dan iets anders, helaas. De bedoeling was goed ;)

[ Voor 55% gewijzigd door RobIII op 01-09-2009 17:01 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • alt-92
  • Registratie: Maart 2000
  • Niet online

alt-92

ye olde farte

RobIII schreef op dinsdag 01 september 2009 @ 16:53:
. Dan gaat 't hooguit mis (op anderstalig OS-vlak dan) op de paden idd.
:Y

ik heb een 864 GB floppydrive! - certified prutser - the social skills of a thermonuclear device


Acties:
  • 0 Henk 'm!

  • Snowbro-M
  • Registratie: September 2009
  • Laatst online: 29-10-2023
uhhhh...mmm... sorry guys, zag het topic op de frontpage, dacht, ik heb ook wel eens ff snel wat nodig zal hem even helpen... sja, als ik dit forum als een learning path moet zien... sorry guys, zo had ik het ff niet geinterpreteerd, foutje! Daarnaast, ben zelf geen programmeur (helaas zou ik bijna zeggen), maar ik heb een zwak voor scriptjes, was toevallig zelf ook aan het scripten ....anyway, dacht dus help hem even met iets dat werkt. Maar comments en verbeteringen aan een werkend script zijn toch ook leerzaam ? Dussss, ik zal me in het vervolg inhouden, netjes de fora rules doornemen en mensen helpen voorzover ik daar zelf qualified genoeg voor ben... d.w.z. aan de hand van jullie opmerkingen kennelijk niet goed genoeg :P ?? :)


Ennuh: nbDays als string met de gedachte dat je het voor een volgende keer snel kunt aanpassen als je het naar een ander aantal dagen wil veranderen. Had er dan ook arguments voor kunnen gebruiken, maar het is maar net hoe mooi je het wel maken. Dus, zodoende, wat een tekst, kan dit ook korter? Damn, moet naar huis, zit alweer 10,5 uur op m'n werk.

Ciao!

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Snowbro-M schreef op dinsdag 01 september 2009 @ 17:23:
anyway, dacht dus help hem even met iets dat werkt
Zoals ik al zei: het was goedbedoeld maar "helpen" doe je iemand niet als je 'm alles voorgekauwd aanlevert. Maar je bent nieuw hier én je intentie was goed dus niemand kijkt je er op aan ;) :>
Snowbro-M schreef op dinsdag 01 september 2009 @ 17:23:
mensen helpen voorzover ik daar zelf qualified genoeg voor ben... d.w.z. aan de hand van jullie opmerkingen kennelijk niet goed genoeg :P ?? :)
Dat heeft niemand gezegd, er mankeert gewoon 't 1 en ander aan je script; shit happens ;) Zeker als je amateur 'programmeur' bent.
Snowbro-M schreef op dinsdag 01 september 2009 @ 17:23:
Ennuh: nbDays als string met de gedachte dat je het voor een volgende keer snel kunt aanpassen als je het naar een ander aantal dagen wil veranderen. Had er dan ook arguments voor kunnen gebruiken, maar het is maar net hoe mooi je het wel maken.
Het ging er mij om dat je hebt staan:
VBScript:
1
nbDays = "7"

Waarmee je nbDays dus als string initialiseert; had je:
VBScript:
1
nbDays = 7

geschreven dan was 't andere koek geweest (een int om precies te zijn :P )

De pest van VBS/VBA/legacy VB is altijd al geweest dat allerlei types te-pas-en-te-onpas worden gecast naar "waarschijnlijk wel het juiste type" i.p.v. dat je een harde error krijgt.

Kijk hier eens naar:
Welke output geeft dit?
VBScript:
1
2
3
4
5
6
7
8
Dim a, b, c, d
a = "1"
b = 1

c = a + "1"
d = b + "1"

msgbox "C: " & c & vbCrLf & "D: " & d

[ Voor 11% gewijzigd door RobIII op 01-09-2009 17:37 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Snowbro-M
  • Registratie: September 2009
  • Laatst online: 29-10-2023
RobIII schreef op dinsdag 01 september 2009 @ 17:30:
[...]

Zoals ik al zei: het was goedbedoeld maar "helpen" doe je iemand niet als je 'm alles voorgekauwd aanlevert. Maar je bent nieuw hier én je intentie was goed dus niemand kijkt je er op aan ;) >:

Thx,... nu kan ik vanavond lekker slapen. :)

[...]

Dat heeft niemand gezegd, er mankeert gewoon 't 1 en ander aan je script; shit happens ;) Zeker als je amateur 'programmeur' bent.

Mooi, dan kom ik af en toe langs om wat bij te leren...

[...]

Het ging er mij om dat je hebt staan:
VBScript:
1
nbDays = "7"

Waarmee je nbDays dus als string initialiseert; had je:
VBScript:
1
nbDays = 7

geschreven dan was 't andere koek geweest (een int om precies te zijn :P )
Ah, volkomen gelijk, dat zie ik nu pas... Kijk, dat bedoel ik, je kan ook leren van hap-klare-goed-maar-niet-helemaal-perfecte-scripts! :)

Acties:
  • 0 Henk 'm!

  • punisher007
  • Registratie: Maart 2001
  • Laatst online: 16-09 10:15
Hoewel het geen vbscript is, dit is ook erg makkelijk: forfiles
http://technet.microsoft....rary/cc753551(WS.10).aspx

Ik moest even zoeken voordat ik het had gevonden, maar goed. Handig voor dit soort activiteiten als je niet al te handig bent met scripten.
http://www.google.com/sea...rtIndex=&startPage=1&rlz=

[ Voor 36% gewijzigd door punisher007 op 01-09-2009 17:47 ]

http://blog.bjornhouben.com


Acties:
  • 0 Henk 'm!

  • alt-92
  • Registratie: Maart 2000
  • Niet online

alt-92

ye olde farte

RobIII schreef op dinsdag 01 september 2009 @ 17:30:
De pest van VBS/VBA/legacy VB is altijd al geweest dat allerlei types te-pas-en-te-onpas worden gecast naar "waarschijnlijk wel het juiste type" i.p.v. dat je een harde error krijgt.
offtopic:
Ik was allang blij een keer een Option Explicit in een VBscript te zien :+

ik heb een 864 GB floppydrive! - certified prutser - the social skills of a thermonuclear device


Acties:
  • 0 Henk 'm!

  • Snowbro-M
  • Registratie: September 2009
  • Laatst online: 29-10-2023
Echter deze tool beperkt je tot LastModified, d.m.v. scripting kun je snel wisselen naar bijv. de CreationDate.
Dat wil in sommige gevallen nog wel eens gevoelig liggen.
Pagina: 1