windows - Selvkørende sletning af filer

Indlæg af Hanne Mølgaard Plasc

Problem



Hvordan ville jeg oprette en selvkørende batchfil for at slette filer i en bestemt mappe.
  Scenario: Jeg har en mappe på en server, hvor alle scannede dokumenter går til, når de er blevet scannet. De vil have, at de scannede dokumenter slettes efter 1 dag. Kan en batchfil oprettes for at gøre det hver dag?

Bedste reference


Du kan bruge den indbyggede opgaveplanlægger - dette kan kalde en batchfil, eller næsten alt. [3]


(Jeg antager Windows, da du nævner batch-filer).

Andre referencer 1


Dette er en ganske kendt metode, og blev dokumenteret i MSDN for nogen tid siden. Denne teknik virker på både Windows 95 og Windows NT. Det virker, fordi MS-DOS-batch-filer er i stand til at slette sig selv. For at teste denne teknik skal du oprette en lille batchfil, der indeholder den enkelte kommando:


del \%0.bat


Batchfilen, når den køres, sletter sig selv og udsteder en fejl 'Batchfilen kan ikke findes'. Denne fejl er bare en simpel besked, så det kan sikkert ignoreres. I sig selv er det heller ikke nyttigt, men når det ændres for at slette vores eksekverbare, løser det vores problem, omend på en ret stærk måde. Vores eksekverbare vil oprette en batchfil (kaldet C: \ DelUs.bat) med følgende indhold:


:Repeat 
del "C:MYDIRMYPROG.EXE" 
if exist "MYPROG.EXE" goto Repeat 
rmdir "C:MYDIR" 
del "DelUS.bat"


Denne batchfil forsøger gentagne gange at slette den angivne fil og vil køre kontinuerligt forbrugende CPU, indtil den lykkes. Når eksekveringen er slettet, sletter batchfilen sig selv.


Den eksekverbare skal gyde batchfilen ved hjælp af CreateProcess, og derefter skal afslutte med det samme. Det ville være en god idé at give batchfilens udførelses tråd en lav prioritet, så den ikke får meget eksekveringstid, indtil den oprindelige eksekverbarhed er afsluttet.


Læs hele artiklen på http://www.catch22.net/tuts/self-deleting-executables, der indeholder den fulde kode til denne teknik. [4]