Batch deletefiles older then op een netwerkshare

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben al een tijdje bezig om een batch te maken die zelf op een server in de share kijkt,
en files delete die ouder zijn als datum x in map x.

Nu heb ik het volgende wat lokaal prima werkt:
C:
cd C:\test

forfiles /p C:\test /m *.xml /d -3 /c "cmd /c del @file"
Alleen met een netwerkpad kan dit forfiles commando niet overweg helaas.
RMDIR commando is ook leuk alleen dit kan weer niet kijken naar files ouder als x.

Vbscripting heb ik niet veel kaas van gegeten,
dus als het via een batch kan dan hoor ik het graag.

Een ander idee is misschien deze batch op de 20 servers lokaal te plaatsen,
en dan centraal op 1 server, al deze 20 batched aan te spreken.
Ik heb alleen geen idee hoe dit aan te pakken.

Aub geen voorstellen van leuke programma's die dit kunnen,
het liefst wil ik de servers niet vervuilen met applicaties als dit gewoon vanuit een batch kan.

Bedankt vast

[ Voor 9% gewijzigd door Verwijderd op 30-11-2010 12:52 ]


Acties:
  • 0 Henk 'm!

  • Archie_T
  • Registratie: Januari 2002
  • Laatst online: 00:45
Als je geen tools wilt gebruiken kan ik me alleen even Robocopy bedenken, moven naar een andere lokatie (/MAXAGE en /MINAGE) en dan RMDIR /S op de centrale lokatie.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@Archie

Hmm dus je zegt dat het onmogelijk is op een netwerkshare?
De manier die ik nu gebruik kan ik toch ook gebruiken en dan op 1 plek alle batches aftrappen?

Acties:
  • 0 Henk 'm!

  • 0fbe
  • Registratie: Januari 2004
  • Laatst online: 00:09
Waarom mount je het netwerkpad niet met NET USE?

Acties:
  • 0 Henk 'm!

  • Wiethoofd
  • Registratie: Juli 2007
  • Laatst online: 14-08 12:22

Wiethoofd

Broadcast TOM

Je zou ook gewoon de netwerkshare tijdelijk een schijfletter toe kunnen wijzen, dan zou je huidige batchfile (met een andere schijfletter) prima moeten werken. En anders is het inderdaad met robocopy aan de slag.

Volg me op Twitter/X & Bluesky


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
betreft 30 servers, met op elke server 2 aparte locaties,
dan moet ik 60 x gaan mounten en unmounten, lijkt me iets teveel van het goede

Acties:
  • 0 Henk 'm!

  • Mijzelf
  • Registratie: September 2004
  • Niet online
Je batch kan gewoon draaien als je de share even tijdelijk mount:
code:
1
2
3
4
5
6
net use X: //server/share
X:
cd X:\test

forfiles /p X:\test /m *.xml /d -3 /c "cmd /c del @file"
net use /DELETE X:

Acties:
  • 0 Henk 'm!

  • The Eagle
  • Registratie: Januari 2002
  • Nu online

The Eagle

I wear my sunglasses at night

Wat je kunt doen (aangenomen dat je servers windows bakken zijn), is op iedere server een task aanmaken in de taskscheduler. Die kun je command line remote aftrappen met een scriptje, of uiteraard gewoon schedulen. :) Als je hem niet via de lokale scheduler laat runnen kun je de task gewoon inactief zetten; trap je hem met schtasks remote af dan draait ie alsnog :)
Hoef je geen 60x te mappen wat onnodig lang duurt, en kun je zelfs die opschoningsjob 1x schedulen op de machine waar je het van af wilt trappen :) Gebruik iig schtasks.exe, zie Wikipedia: schtasks

[ Voor 17% gewijzigd door The Eagle op 30-11-2010 13:19 ]

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


Acties:
  • 0 Henk 'm!

  • Archie_T
  • Registratie: Januari 2002
  • Laatst online: 00:45
Verwijderd schreef op dinsdag 30 november 2010 @ 13:04:
@Archie

Hmm dus je zegt dat het onmogelijk is op een netwerkshare?
De manier die ik nu gebruik kan ik toch ook gebruiken en dan op 1 plek alle batches aftrappen?
Nee jij zegt dat het onmogelijk is ;) Op deze manier kan je toch robocopy op UNC pad naar lokaal gebruiken en zo de files op de server weghalen. Mijn voorkeur gaat nog steeds uit naar VBScript of Powershell, maar aangezien je dat niet wilt gebruiken wordt het zo'n soort oplossing. Drive mappen vind ik ook een mooi idee, maar nog steeds veel werk.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt ..
Archie, noem eens een voorbeeld met VBSript dan als je wil?
Hoe pak je zoiets aan dan?

Acties:
  • 0 Henk 'm!

  • Archie_T
  • Registratie: Januari 2002
  • Laatst online: 00:45
http://thebackroomtech.co...-files-older-than-x-days/
code:
1
2
3
4
5
6
7
8
9
10
Dim Fso
Dim Directory
Dim Modified
Dim Files
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Directory = Fso.GetFolder("\\server\share")
Set Files = Directory.Files
For Each Modified in Files
If DateDiff("D", Modified.DateLastModified, Now) > 3 Then Modified.Delete
Next

Eerst even op een test omgeving doen!
En voor nog andere scripts google even op delete files older than vbscript.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Archie,

Bedankt voor het meedenken! het scriptje werkt goed!
Hoe kan ik dit het nou het beste aanpakken als hij naar 30 verschillende servers moet kijken en op elke server in 2 paden moet kijken ?

Dim Fso
Dim Directory
Dim Modified
Dim Files
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Directory = Fso.GetFolder("\\server1\c$\test1")
Set Files = Directory.Files
For Each Modified in Files
If DateDiff("D", Modified.DateLastModified, Now) > 2 Then Modified.Delete
Next


En dan steeds een nieuw vbs scriptje maken?
Of kan in dit scripts wat regels toevoegen zodat het in 1 script kan?

Acties:
  • 0 Henk 'm!

  • Archie_T
  • Registratie: Januari 2002
  • Laatst online: 00:45
In dit voorbeeld moet je een servers.txt hebben waar de servernamen instaan. Hier ga ik er dus uit van dat het pad altijd hetzelfde is:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dim Fso
Dim Directory
Dim Modified
Dim Files
Set Fso = CreateObject("Scripting.FileSystemObject")
Set objFile=FSO.OpenTextFile ("servers.txt")
Do Until objFile.AtEndOfStream
 strServer=objFile.readline
 strServerPath= "\\"&strServer&"\c$\test1"
 Set Directory = Fso.GetFolder(strServerPath)
 Set Files = Directory.Files
 For Each Modified in Files
 If DateDiff("D", Modified.DateLastModified, Now) > 2 Then Modified.Delete
 Next
Loop

Mocht je nou aldoor een ander pad hebben, zet dan het volledige pad in de servers.txt en pak de volgende
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim Fso
Dim Directory
Dim Modified
Dim Files
Set Fso = CreateObject("Scripting.FileSystemObject")
Set objFile=FSO.OpenTextFile ("servers.txt")
Do Until objFile.AtEndOfStream
 strServerPath=objFile.readline
 Set Directory = Fso.GetFolder(strServerPath)
 Set Files = Directory.Files
 For Each Modified in Files
 If DateDiff("D", Modified.DateLastModified, Now) > 2 Then Modified.Delete
 Next
Loop

Het voordeel is dat je niet de code hoeft te veranderen als je een server toevoegt of weghaalt, dit doe je allemaal vanuit de servers.txt file.

[ Voor 0% gewijzigd door Archie_T op 30-11-2010 14:23 . Reden: D/T foutje.. ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Super bedankt voor het meedenken,
alles werkt prima, hij verwijderd de bestanden mooi,
alleen hij geeft wel nog een error aan na het uitvoeren:

Afbeeldingslocatie: http://img149.imageshack.us/img149/6352/naamloosgo.jpg

Het script heb ik exact geplakt zoals jij vermeld:

Dim Fso
Dim Directory
Dim Modified
Dim Files
Set Fso = CreateObject("Scripting.FileSystemObject")
Set objFile=FSO.OpenTextFile ("servers.txt")
Do Until objFile.AtEndOfStream
strServerPath=objFile.readline
Set Directory = Fso.GetFolder(strServerPath)
Set Files = Directory.Files
For Each Modified in Files
If DateDiff("D", Modified.DateLastModified, Now) > 2 Then Modified.Delete
Next
Loop

En in servers.txt staat:
\\jkj

Acties:
  • 0 Henk 'm!

  • Archie_T
  • Registratie: Januari 2002
  • Laatst online: 00:45
Het script doet een readline, het kan zijn dat je achter de laatste server nog een extra "witte" regel hebt, dan probeert hij dus de server " " te benaderen en dan gaat het fout.. Om de foutmelding te voorkomen moet je dus zorgen dat je geen return bij de laatste regel hebt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
*zucht

Had ik maar zoveel kennis haha.
Bedankt Archie voor je hulp.
Pagina: 1