windows - forsøger at finde en måde at holde opdateret MIR'ed bibliotek med 7 dages værd information

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at bruge Robocopy (Win10) til at opretholde en mappe med 7 dages musikværdi, der vil 'age out', med den 8. forudgående dag slettet. Jeg kører dette script om natten.


Jeg har prøvet dette, simpelthen:


robocopy c:music c:music7 /MIR /MAXAGE:7 /S


Første kopi fungerer godt; Hvad sker der dog, er filer, der er 8 dage gamle (eller ældre) ikke 'renset' fra music7-biblioteket den 8. dag. Mangler jeg en parameter i robocopy for at slette dem?


Du kan repro dette også ved at køre den første kommando:


robocopy c:music c:music7 /MIR /MAXAGE:7


og derefter genstart, ændrer MAXAGE til lavere


robocopy c:music c:music7 /MIR /MAXAGE:2


og bemærk at dag 3-7 indhold ikke fjernes.

Bedste reference


Jeg tror, ​​du har en misforståelse om renselogikken (/purge), der indgår i /mir indstillingen:


Kun filer, der ikke længere findes i mappen kilde , fjernes også fra destinationsmappen, som ikke er relateret til indstillingen /maxage:<N>.


/maxage:<N> begrænser kun, hvilke af de eksisterende kildefiler der kopieres, hvornår de sidst blev ændret.

Det betyder ikke , at ældre filer automatisk fjernes fra destinationsmappen.


Hvis du antager, at du vil beholde ældre filer i mappen kilde og kun rense dem fra mappen destination :



  • Kør robocopy c:music c:music7 /mir /maxage:7 som tidligere, som kun kopierer de sidste 7 dages 'værd af fil til destinationsmappen.



    • Som en side: Intet behov for mulighed /s (Kopier underdier., bortset fra tomme), fordi /mir indebærer /e (kopier underdier., inklusive tomme)


  • Brug derefter et andet værktøj/skal, f.eks. PowerShell, til at fjerne ældre filer fra mappen destination :





$cutOffDate = (Get-Date).Date.AddDays(-7)
Get-ChildItem -File -Recurse -LiteralPath c:Music7 |
  Where-Object { $\_.LastWriteTime -lt $cutOffDate } |
    Remove-Item -WhatIf 


-WhatIf previews hvad vil blive slettet; fjern det for at udføre faktisk sletning.

Andre referencer 1


Mange tak for kommentarerne. Efter yderligere forskning kunne jeg få det, jeg var efter at have opholdt sig i CMD ved hjælp af ForFiles-kommandoen i forbindelse med Robocopy i en batchfil.


Ligner på disse linjer:


ForFiles /p "c:music7" /d -7 /c "cmd /c del @path /Q /S"

ForFiles /p "c:music7" /d -7 /c "cmd /c rd @path /Q"

Robocopy c:music c:music7 /MIR /MAXAGE:6


Ting kan blive lidt quirky, da jeg kan have nogle mapper, hvis datoer synes at blive ændret tidligere eller senere end deres filer under dem, så jeg kan ikke bare gøre en destruktiv RD/S, og robocopy vil tilføje filerne tilbage på sin plads.


PS - For de nysgerrige, giver denne metode mig mulighed for effektivt at efterligne tidsbaserede autoplaylister til Groove, der ikke understøtter det indbygget som WMP eller Zune. Jeg kan skubbe de 7 dage værd af sange i OneDrive \ Music og filtrere på det i spiller klienter til at spille den del af min samling. Nu har jeg en måde at opgaver scheduler automatisere rensningen ældre end 7 dage indhold. Tak igen.

Andre referencer 2


I powerhell efter din robocopy eller en separat proces


        Get-ChildItem -file -path C:music ($\_.CreationTime -le (Get-Date).AddDays(-8)) | remove-item