Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Win2k8] Hulp bij batch/cmd script verwijderen mappen/bestan

Pagina: 1
Acties:

  • Fr0zenFlame
  • Registratie: September 2003
  • Laatst online: 19-11-2024

Fr0zenFlame

LAN 'A Holic

Topicstarter
Op het moment ben ik bezig met het inrichten van een uitwissel platform voor data.
Hiervoor heb ik verschillende maatregels getroffen, zowel technisch als procedureel.

Technisch o.a.:
- Rechten op de map.
- HTTP Basic authentication.
- De verbinding over https.
- Het verkeer gaat door een firewall.
- Op de netscaler wordt bovendien een IP filter toegepast om alleen het IP toe te laten dat vereist is.
- De 2k8r2 server wordt op het meest recente patch level gehouden.

Procedureel o.a:
- Er worden afspraken gemaakt met de 3e partij wanneer de data beschikbaar moet zijn.
- IIS services worden gestopt wanneer deze niet nodig zijn, en gestart wanneer deze wel nodig zijn.
- Ook worden de user accounts alleen enabled wanneer deze nodig zijn en hebben deze niet meer rechten dan nodig.
- De bestanden dienen na het downloaden of de afgesproken tijd te worden verwijderd.

Echter ben ik nog bezig met de laatste maatregel, hier heb ik namelijk een batch/cmd scriptje voor geschreven, alleen krijg ik het niet voor elkaar zowel bestanden als directories te verwijderen en tegelijkertijd ook de mappen structuur in stand te houden.

Het scriptje zou in de ideale situatie alle leveranciers (leveranciers mappen zijn variable) mappen door moeten loopen en dan alle bestanden/mappen verwijderen (recursive) en de leverancier map intact moeten laten. Dit wil ik zo doen om de structuur met de daarbij horende rechten in tact te laten.

Probleem blijft dat wanneer ik het RD commando gebruik ook de leveranciers mappen worden verwijderd en dat je geen wildcards (*/?) kan gebruiken, en met het DEL commando kan je weer geen mappen verwijderen en wel wildcards gebruiken.

Gewenste situatie > mappen structuur voor draaien batch/cmd bestand:

[+]----[Public map]
[+]—[Leverancier 1]
[+]—[map1]
[+]—[map1]
—bestand1.txt
—bestand2.txt
—bestand3.txt
[+]—[Leverancier 2]
—bestand1.txt
—bestand2.txt
—bestand3.txt
[+]—[Leverancier 3]
[+]—[map1]
[+]—[map1]
[+]—[Leverancier 4]
[+]—[map1]
—bestand1.txt


Gewenste situatie > mappen structuur na draaien batch/cmd bestand:

[+]----[Public map]
[+]—[Leverancier 1]
[+]—[Leverancier 2]
[+]—[Leverancier 3]
[+]—[Leverancier 4]



Ik heb het nu opgelost met een vrij statisch script dat dus wel de bestanden verwijderd na 1 dag, echter niet de gecreëerde mappen in de leveranciers mappen.


set logfile=%cd%\log\removed on %date:/=-%.txt
set source=C:\inetpub\wwwroot\****
set x_days=1

echo ***** DIRECTORYs and FILES DELETED ON %date:/=-% ****** > "%logfile%"
echo. >> "%logfile%"
echo. >> "%logfile%"

dir /s %source% >> "%logfile%"

forfiles /s /p %source% /d -%x_days% /c "cmd /c if @ISDIR==TRUE del /F /S /Q @FILE"
forfiles /s /p %source% /d -%x_days% /c "cmd /c del /F /S /Q @FILE"

echo. >> "%logfile%"
echo. >> "%logfile%"
echo ***** EOF ****** >> "%logfile%"


Heeft iemand hier ervaring mee? Ik loop gewoon steeds tegen de limitaties van de commando’s DEL en RD aan 
Wellicht dat het mogelijk is de hoofdmap (public) uit te lezen en allen mappen (leveranciers) in een variable te stoppen of in een *.txt bestand, en dan vervolgens een loop te doen over deze variable… echter is mijn programmeer kennis hiervoor te beperkt….

i7-6700K | Z170A XPOWER GAMING TITANIUM EDITION | InWin904 | 32GB Corsair Dominator Platinum | nVidia GeForce RTX2080 TI | Iiyama G-Master UWQH 34" | 2x 1TB Samsung SSD 980PRO | 1x 4TB Samsung 860EVO | Arctis 7 | SteelSeries Apex Pro | Logitech G502 Hero


  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 30-11 15:27

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Staan er alleen maar op toplevel een folderstructuur? In dat geval:
code:
1
For /F %%A in ('dir /b /ad') do del %%A\ /Q /S

(zonder batch moet je %%A even veranderen in %A, die dubbele % is nodig voor toepassing in een batchfile).

Kleine uitleg:
Ik maak variables %A welke de uitkomst is van het commande "dir /b /ad" (directorylisting van enkel directory's zonder aanvullende info). Deze variable gebruik ik na het "do" commando om iets mee te doen. In dit geval het deleten van de inhoud.

Test het wel even (verander bv het "del" commando even naar "echo" om even goed te kunnen zien wat er gebeurd). ;)

Je zult wellicht nog het een en ander aan paden aan moeten passen, maar in basic zou dit moeten werken :)
Question Mark schreef op donderdag 29 december 2011 @ 14:25:
Test het wel even (verander bv het "del" commando even naar "echo" om even goed te kunnen zien wat er gebeurd. ;)
Edit:
Anders test ik het even zelf zonder die aanpassing. Ik kan je meedelen dat het gewoon werkt.... |:(

code:
1
2
3
4
5
6
7
8
9
10
11
Deleted file - I:\E-Books\HP Device Manager.pdf
Deleted file - I:\E-Books\ILO 3.pdf
Deleted file - I:\E-Books\Ilo domain member.pdf
Deleted file - I:\E-Books\CCIA\CVA-500-1_Front_Cover.pdf
Deleted file - I:\E-Books\CCIA\CVA-500-1_Module_1.pdf
Deleted file - I:\E-Books\CCIA\CVA-500-1_Module_12-14.pdf
Deleted file - I:\E-Books\CCIA\CVA-500-1_Module_15-17.pdf
Deleted file - I:\E-Books\CCIA\CVA-500-1_Module_2-3.pdf
Deleted file - I:\E-Books\CCIA\CVA-500-1_Module_4-5.pdf

Etc...

/me Slingert HP Data protection manager vast aan....

[ Voor 38% gewijzigd door Question Mark op 29-12-2011 14:53 ]

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


  • Fr0zenFlame
  • Registratie: September 2003
  • Laatst online: 19-11-2024

Fr0zenFlame

LAN 'A Holic

Topicstarter
Besdankt voor je reactie ? Mark :)

Het volledige path naar de folder is:
C:\inetpub\wwwroot\webservernaam\

In deze map staat de structuur van leveranciers die niet altijd hetzelfde is.
Elke dag kan er bijvoorbeeld een map bij komen of een map af gaan, dus ik kan geen absolute path namen gebruiken.

De folder die bij jou E-Books heet, is bij mij een variable directory, er moet dus gebladerd worden door alle onderliggende variable mappen van "C:\inetpub\wwwroot\webservernaam\" en dan moet er dus in die variable mappen alle content worden verwijderd.

Het script draaid vanuit:
C:\scripts\scriptnaam.cmd

[ Voor 17% gewijzigd door Fr0zenFlame op 29-12-2011 15:17 ]

i7-6700K | Z170A XPOWER GAMING TITANIUM EDITION | InWin904 | 32GB Corsair Dominator Platinum | nVidia GeForce RTX2080 TI | Iiyama G-Master UWQH 34" | 2x 1TB Samsung SSD 980PRO | 1x 4TB Samsung 860EVO | Arctis 7 | SteelSeries Apex Pro | Logitech G502 Hero


  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
Je zou ook kunnen kijken hoever je met Powershell komt. Zo te zien wil je alleen txt bestanden verwijderen.
Remove-Item cmdlet

Zelf zou ik dan iets doen als:
Remove-Item C:\inetpub\wwwroot\webservernaam\*.txt -Recurse


Als je het eerst wil testen kun je er -WhatIf achter zetten:
Remove-Item C:\inetpub\wwwroot\webservernaam\*.txt -Recurse -WhatIf


Mocht je willen

Let op: Niet getest

[ Voor 16% gewijzigd door Turdie op 29-12-2011 15:27 ]


  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 30-11 15:27

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Ik paste dan ook even een stukje uit mijn commandvenster.

Ik stond in de root van mijn I-drive toen ik de regel uitvoerde. Je kunt zien dat het For commando keurig de (dynamische) directory "E-books" in mijn I-drive "gevonden" heeft en er "iets" mee gedaan heeft. In dit geval het commando: "del E-Books\ /Q /S"

Als jij de regel dan aanpast naar:
code:
1
For /F %%A in ('dir C:\inetpub\wwwroot\webservernaam /b /ad') do del C:\inetpub\wwwroot\webservernaam\%%A\ /Q /S
Zou je er al bijna moeten zijn.

[ Voor 3% gewijzigd door Question Mark op 29-12-2011 15:27 ]

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


  • Mike2k
  • Registratie: Mei 2002
  • Laatst online: 02:33

Mike2k

Zone grote vuurbal jonge! BAM!

Wellicht ben ik de enige maar ehh...bij "uitwissel platform voor data" krijg ik het idee dat het redelijk profi is...
En dan HTTP Basic Authentication...iedereen dan het netwerk van je gebruiker afsnuffelt kan de login gegevens zou uit de header halen...absoluut niet veilig, ook niet als je ssl aanzet!

Zou er dan toch NTLM van maken...

You definitely rate about a 9.0 on my weird-shit-o-meter
Chuck Norris doesn't dial the wrong number. You answer the wrong phone.


  • johnkeates
  • Registratie: Februari 2008
  • Laatst online: 04-07 16:30
NTLM is uiterst eenvoudig te cracken hoor. Ik zou Kerberos doen. En dan ten minste SSL.

  • SKiLLa
  • Registratie: Februari 2002
  • Niet online

SKiLLa

Byte or nibble a bit ?

Hoezo is Basic Authentication niet veilig als je SSL gebruikt ? Je zal toch eerst de 'SSL' moeten kraken wil je in de datastream kunnen kijken ...

Natuurlijk is Kerberos ansich veiliger (credentials gaan niet als plain text over de lijn), maar werkt alleen met Windows clients. En dat is een beetje vervelend met leveranciers die mogelijk *nix gebruiken ...

'Political Correctness is fascism pretending to be good manners.' - George Carlin


  • Mike2k
  • Registratie: Mei 2002
  • Laatst online: 02:33

Mike2k

Zone grote vuurbal jonge! BAM!

SKiLLa schreef op donderdag 29 december 2011 @ 15:45:
Hoezo is Basic Authentication niet veilig als je SSL gebruikt ? Je zal toch eerst de 'SSL' moeten kraken wil je in de datastream kunnen kijken ...

Natuurlijk is Kerberos ansich veiliger (credentials gaan niet als plain text over de lijn), maar werkt alleen met Windows clients. En dat is een beetje vervelend met leveranciers die mogelijk *nix gebruiken ...
Sorry, je hebt gelijk...Basic auth over SSL gaat wel goed...
Mooiste oplossing zou certificaten zijn denk ik...geen login maar een certificaat

You definitely rate about a 9.0 on my weird-shit-o-meter
Chuck Norris doesn't dial the wrong number. You answer the wrong phone.


  • Fr0zenFlame
  • Registratie: September 2003
  • Laatst online: 19-11-2024

Fr0zenFlame

LAN 'A Holic

Topicstarter
Mike2k schreef op donderdag 29 december 2011 @ 16:00:
[...]


Sorry, je hebt gelijk...Basic auth over SSL gaat wel goed...
Mooiste oplossing zou certificaten zijn denk ik...geen login maar een certificaat
Daar moeten we idd ook nog even naar gaan kijken :)
In principe zit je met een IP filter en een beperkt window waarop de data beschikbaar is ook goed in mijn optiek de data kan immers alleen naar het afgesproken IP in een afgesproken tijd window, het grootste gedeelte van de tijd staan de IIS services immers uit... ik ga er even mee aan de slag!

Alvast bedank!

i7-6700K | Z170A XPOWER GAMING TITANIUM EDITION | InWin904 | 32GB Corsair Dominator Platinum | nVidia GeForce RTX2080 TI | Iiyama G-Master UWQH 34" | 2x 1TB Samsung SSD 980PRO | 1x 4TB Samsung 860EVO | Arctis 7 | SteelSeries Apex Pro | Logitech G502 Hero


  • Fr0zenFlame
  • Registratie: September 2003
  • Laatst online: 19-11-2024

Fr0zenFlame

LAN 'A Holic

Topicstarter
Heb even een test structuur aangemaakt en je script regel getest, helaas kom ik tot dezelfde conclusie.

Structuur:
C:\scripts\test
C:\scripts\test\leverancier1
C:\scripts\test\leverancier2
C:\scripts\test\leverancier3
C:\scripts\test\leverancier4

In alle leverancier mappen heb ik random mappen en bestanden gezet.

Met de zelfde syntax als jij gebruikt met relatieve paden worden inderdaad alle bestanden verwijderd en wordt de mappen structuur bewaard, echter worden ook de sub mappen onder elke leveranciers verwijderd, omdat we het commando DEL gebruiken.

For /F %%A in ('dir C:\scripts\test /b /ad') do del C:\scripts\test\%%A\ /Q /S


Wanneer ik het commando "DEL" vervang door "RD" worden ook de directory's verwijderd, en dus ook helaas de "leverancierX" mappen |:( 8)7
For /F %%A in ('dir C:\scripts\test /b /ad') do rd C:\scripts\test\%%A\ /Q /S


Enig idee hoe ik de structuur in stand kan houden die hieronder staat en de daaronder liggende bestanden EN mappen kan verwijderen.

C:\scripts\test
C:\scripts\test\leverancier1
C:\scripts\test\leverancier2\map2\
C:\scripts\test\leverancier3
C:\scripts\test\leverancier4

Stel er bestaat een map "map1" onder de map leverancier2 dan wil ik dat de map leverancier2 blijft bestaan, maar "map2" wordt verwijderd.

i

i7-6700K | Z170A XPOWER GAMING TITANIUM EDITION | InWin904 | 32GB Corsair Dominator Platinum | nVidia GeForce RTX2080 TI | Iiyama G-Master UWQH 34" | 2x 1TB Samsung SSD 980PRO | 1x 4TB Samsung 860EVO | Arctis 7 | SteelSeries Apex Pro | Logitech G502 Hero


  • punisher007
  • Registratie: Maart 2001
  • Laatst online: 29-11 17:15
Volgens mij doet dit wat je wil:

code:
1
2
3
4
5
6
7
8
9
10
11
#Set root dir
$root = "C:\scripts\test"

#Get subfolders of the root dir
$subfolders = get-childitem -path $root -force | where {$_.PSisContainer -eq $true}

#Remove all child items (both items and folders) from the subfolders of the root dir.
foreach($subfolder in $subfolders)
{
    get-childitem -path $folder.fullname -recurse | remove-item -recurse -Force
}


Ik ben geen held in powershell, dus test het aub ook even goed :)

[ Voor 20% gewijzigd door punisher007 op 30-12-2011 00:43 ]

http://blog.bjornhouben.com


  • engelbertus
  • Registratie: April 2005
  • Laatst online: 24-11 17:33
ik gooi wel eens een heleboel .bak, .log en .err files van de server als er na een tijd weer veel loze data op is komen te staan, dit doe ik dan met del /s *.bak

ik weet niet of dat ook werkt met rd, maar dat kun je proberen.

ik weet niet of je ook alleen de eerste level van de root appart kunt krijgen, maar dan zou je elke leveranciersmap appart kunnen opschonen door eerst te cd-en naar de leveranciersmappen, of je zorgt er voor dat je batchprogramma geen rechten heeft op de leveranciersdirectories.

En misschien is het ook nog mogelijk de leveranciersdirectories eerst af te vangen, dan alles weggooien, en vervolgens alleen de leveranciersdirectories weer aanmaken.


verder ken ik een ( windows) ("RED": remove empty drectory) programma, dat lege directories weggooit, wellicht kun je dat ook gebruiken, of bestaan er ook versies die het onder een commandprompt doen.

  • Equator
  • Registratie: April 2001
  • Laatst online: 28-11 20:09

Equator

Crew Council

#whisky #barista

Als de situatie na het verwijderen van de bestanden altijd exact gelijk moet zijn, dan zou je nog wat kunnen vogelen met de /MIR functie van RoboCopy :)

Bijvoorbeeld:
C:\> robocopy c:\temp\bronmap C:\temp\doelmap /MIR


Voorbeeldje..
C:\Temp>dir /b /s doelmap
C:\Temp\doelmap\test - kopie (2).txt
C:\Temp\doelmap\test - kopie (3).txt
C:\Temp\doelmap\test - kopie (4).txt
C:\Temp\doelmap\test - kopie.txt
C:\Temp\doelmap\test.txt
C:\Temp\doelmap\test1
C:\Temp\doelmap\test2
C:\Temp\doelmap\test3
C:\Temp\doelmap\test4
C:\Temp\doelmap\test1\test - kopie (2).txt
C:\Temp\doelmap\test1\test - kopie (3).txt
C:\Temp\doelmap\test1\test - kopie (4).txt
C:\Temp\doelmap\test1\test - kopie.txt
C:\Temp\doelmap\test1\test.txt
C:\Temp\doelmap\test3\test - kopie (2).txt
C:\Temp\doelmap\test3\test - kopie (3).txt
C:\Temp\doelmap\test3\test - kopie (4).txt
C:\Temp\doelmap\test3\test - kopie.txt
C:\Temp\doelmap\test3\test.txt

C:\Temp>dir /b/s bronmap
C:\Temp\bronmap\test1
C:\Temp\bronmap\test2
C:\Temp\bronmap\test3
C:\Temp\bronmap\test4

C:\Temp>robocopy c:\temp\bronmap c:\Temp\doelmap /MIR /LOG:C:\TEMP\Testje.log

       Logboekbestand: C:\TEMP\Testje.log

C:\Temp>


c:\temp\testje.log

-------------------------------------------------------------------------------
   ROBOCOPY     ::  Robuust bestanden kopi‰ren in Windows                        
-------------------------------------------------------------------------------

   Gestart: Fri Dec 30 08:11:06 2011

     Bron : c:\temp\bronmap\
     Doel : c:\Temp\doelmap\

 Bestanden: *.*
	    
               Opties: *.* /S /E /COPY:DAT /PURGE /MIR /R:1000000 /W:30 

------------------------------------------------------------------------------

	                   0	c:\temp\bronmap\
	  Ext. bestand		       0	test - kopie (2).txt
	  Ext. bestand		       0	test - kopie (3).txt
	  Ext. bestand		       0	test - kopie (4).txt
	  Ext. bestand		       0	test - kopie.txt
	  Ext. bestand		       0	test.txt
	                   0	c:\temp\bronmap\test1\
	  Ext. bestand		       0	test - kopie (2).txt
	  Ext. bestand		       0	test - kopie (3).txt
	  Ext. bestand		       0	test - kopie (4).txt
	  Ext. bestand		       0	test - kopie.txt
	  Ext. bestand		       0	test.txt
	                   0	c:\temp\bronmap\test2\
	                   0	c:\temp\bronmap\test3\
	  Ext. bestand		       0	test - kopie (2).txt
	  Ext. bestand		       0	test - kopie (3).txt
	  Ext. bestand		       0	test - kopie (4).txt
	  Ext. bestand		       0	test - kopie.txt
	  Ext. bestand		       0	test.txt
	                   0	c:\temp\bronmap\test4\

------------------------------------------------------------------------------

              TotaalGekopieerdOvergeslagenNiet gelijk   Mislukt   Extra's
   Mappen:         5         0         5         0         0         0
Bestanden:         0         0         0         0         0        15
    Bytes:         0         0         0         0         0         0
   Aantal:   0:00:00   0:00:00                       0:00:00   0:00:00

  Gestopt: Fri Dec 30 08:11:06 2011


C:\Temp>dir /b/s doelmap
C:\Temp\doelmap\test1
C:\Temp\doelmap\test2
C:\Temp\doelmap\test3
C:\Temp\doelmap\test4

C:\Temp>dir /b/s bronmap
C:\Temp\bronmap\test1
C:\Temp\bronmap\test2
C:\Temp\bronmap\test3
C:\Temp\bronmap\test4


Voordeel van robocopy is dat je ook eventuele rechten kan meekopieren..

  • ThomVis
  • Registratie: April 2004
  • Laatst online: 11-09 21:04

ThomVis

Detected rambling:

code:
1
2
3
4
5
6
7
8
9
@echo off
set "Root=C:\scripts\test"
for /f "tokens=*" %%a in ('dir %Root% /ad/b') do set "Folder=%%a" & call:DelContent
goto:eof

:DelContent
for /f "tokens=*" %%a in ('dir "%Root%\%Folder%" /ad/b') do rd /s /q "%Root%\%Folder%\%%a"
for /f "tokens=*" %%a in ('dir "%Root%\%Folder%" /a-d/b') do del /q /f "%Root%\%Folder%\%%a"
goto:eof


In de DelContent subroutine kan je ook nog selecties maken op %Folder% om hem helemaal te verwijderen, of juist over te slaan.

You don't have to know how the computer works, just how to work the computer.


  • Equator
  • Registratie: April 2001
  • Laatst online: 28-11 20:09

Equator

Crew Council

#whisky #barista

offtopic:
Wist je dat je ook argumenten door kunt geven aan de routine :DelContent. Je kan bijvoorbeeld "Call :DelContent %%a" gebruiken. In de routine is het eerste argument dan %1, de 2e %2 etc..

  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 30-11 15:27

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Ik heb even niet helemaal duidelijk wat je nu wilt:
Fr0zenFlame schreef op vrijdag 30 december 2011 @ 00:05:
Enig idee hoe ik de structuur in stand kan houden die hieronder staat en de daaronder liggende bestanden EN mappen kan verwijderen.

C:\scripts\test
C:\scripts\test\leverancier1
C:\scripts\test\leverancier2\map2\
C:\scripts\test\leverancier3
C:\scripts\test\leverancier4

Stel er bestaat een map "map1" onder de map leverancier2 dan wil ik dat de map leverancier2 blijft bestaan, maar "map2" wordt verwijderd.
Dit lees ik als: alles behalve de "root mappen" verwijderen, dus alle child-folders van de "root mappen" inclusief inhoud verwijderen. Echter geef je verderop aan dat dit nu net niet de bedoeling is.
Fr0zenFlame schreef op vrijdag 30 december 2011 @ 00:05:
Met de zelfde syntax als jij gebruikt met relatieve paden worden inderdaad alle bestanden verwijderd en wordt de mappen structuur bewaard, echter worden ook de sub mappen onder elke leveranciers verwijderd, omdat we het commando DEL gebruiken.
Bij mij bestaat er dan nu een beetje verwarring over wat nu precies de bedoeling is.
Equator schreef op vrijdag 30 december 2011 @ 08:30:
offtopic:
Wist je dat je ook argumenten door kunt geven aan de routine :DelContent. Je kan bijvoorbeeld "Call :DelContent %%a" gebruiken. In de routine is het eerste argument dan %1, de 2e %2 etc..
Kleine tip is verder nog even dat het eigenlijk ook een best practice is om na afloop van een script alle gebruikte variables weer even te resetten. Ik zou dan ook even eindigen met het commando "set "Folder=". :)

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


  • ThomVis
  • Registratie: April 2004
  • Laatst online: 11-09 21:04

ThomVis

Detected rambling:

Equator schreef op vrijdag 30 december 2011 @ 08:30:
offtopic:
Wist je dat je ook argumenten door kunt geven aan de routine :DelContent. Je kan bijvoorbeeld "Call :DelContent %%a" gebruiken. In de routine is het eerste argument dan %1, de 2e %2 etc..
offtopic:
Klopt, maar als er spaties in zitten moet je de boel weer met shift aan elkaar breien. Plus als je een beetje string-bashing wilt gaan doen wil je het toch in een variabele hebben staan ipv. een parameter
Question Mark schreef op vrijdag 30 december 2011 @ 08:54:
Kleine tip is verder nog even dat het eigenlijk ook een best practice is om na afloop van een script alle gebruikte variables weer even te resetten. Ik zou dan ook even eindigen met het commando "set "Folder=". :)
Klopt, maar meestal worden onze batchfiles gescheduled of dubbelklik aangeroepen, de CMD shell verdwijnt dan weer, inclusief de nieuwe variabelen. Maar wel iets om rekening mee te houden.

[ Voor 32% gewijzigd door ThomVis op 30-12-2011 09:31 ]

You don't have to know how the computer works, just how to work the computer.


  • Fr0zenFlame
  • Registratie: September 2003
  • Laatst online: 19-11-2024

Fr0zenFlame

LAN 'A Holic

Topicstarter
ThomVis schreef op vrijdag 30 december 2011 @ 08:23:
code:
1
2
3
4
5
6
7
8
9
@echo off
set "Root=C:\scripts\test"
for /f "tokens=*" %%a in ('dir %Root% /ad/b') do set "Folder=%%a" & call:DelContent
goto:eof

:DelContent
for /f "tokens=*" %%a in ('dir "%Root%\%Folder%" /ad/b') do rd /s /q "%Root%\%Folder%\%%a"
for /f "tokens=*" %%a in ('dir "%Root%\%Folder%" /a-d/b') do del /q /f "%Root%\%Folder%\%%a"
goto:eof


In de DelContent subroutine kan je ook nog selecties maken op %Folder% om hem helemaal te verwijderen, of juist over te slaan.
Robocopy had misschien ook een oplossing kunnen bieden, maar het bovenstaande script doet eigenlijk precies wat ik zoek :) Bedankt!
Ik moet alleen nog even een manier zien te vinden om dit ook te doen op basis van de creation/modified date van het bestand, dus dat het verwijderd wordt wanneer het ouder is als 1 dag of bijvoorbeeld 2 dagen.

Ik hoop dit te kunnen doen door "/d -%x_days%" te implementeren zoals ik dat ook in mn initiële script heb gedaan.

i7-6700K | Z170A XPOWER GAMING TITANIUM EDITION | InWin904 | 32GB Corsair Dominator Platinum | nVidia GeForce RTX2080 TI | Iiyama G-Master UWQH 34" | 2x 1TB Samsung SSD 980PRO | 1x 4TB Samsung 860EVO | Arctis 7 | SteelSeries Apex Pro | Logitech G502 Hero

Pagina: 1