Verwijderen met specifieke aanmaak tijden.

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Gutteguttegut
  • Registratie: Juli 2001
  • Laatst online: 30-09 13:47
Ik heb een lange timelapse gedraaid van enkele weken.
Deze keer gewoon een GoPro opgehangen en dag en nacht laten draaien.

Normaal ga ik dan handmatig door alle mappen heen (999 foto's per map) en verwijder alle foto's tussen 16:59 en 9:00uur.
Maar dit is best veel werk en wil ik graag automatiseren.

Ik zit nu al een paar dagen te zoeken en heb ook veel gevonden maar loop toch nog tegen een klein probleem aan.

Reeds gevonden op GoT: Hoe veel bestanden tussen bepaalde tijd -stempel verwijderen

VBS script waar ik al iets mee kan doen gevonden online:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
:: (modified) original code by Salmon Trout - Oct 2014
:: - deletes files with creation time earlier than 08:00 and after 16:59 (on files from any day)
::

>  "%temp%\fhour.vbs" echo Set fso = CreateObject("Scripting.FileSystemObject")
>> "%temp%\fhour.vbs" echo Set f = fso.GetFile(trim(wscript.arguments(0)))
>> "%temp%\fhour.vbs" echo wscript.echo Hour (f.DateCreated)

for %%A in ("D:\Timelapse\test\*.jpg") do (
    for /f "delims=" %%B in ('cscript /nologo "%temp%\fhour.vbs" "%%~fA"') do (
        set "action="
        if %%B lss 8  set action=Delete
        if %%B geq 17 set action=Delete
        if /i not "%%~fA"=="%~f0" if defined action echo deleting "%%~fA" & del "%%~fA /s"
    )
)
pause

Nu ben ik geen programmeur en heb nog nooit met vbs oid gewerkt, ik had primair de hoop dat het via een simpel batch bestand had gekund...

Bij bovenstaande code loop ik tegen het probleem aan dat subfolders niet worden meegenomen en aangezien het om 160.000+ bestanden gaat opgedeeld in mappen met 999 foto's per map.....

Kan iemand mij op weg helpen om mijn doel te bereiken?

The birds turned into The Flying Dutchmen!

Beste antwoord (via Gutteguttegut op 19-12-2019 04:42)


  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

Gutteguttegut schreef op maandag 16 december 2019 @ 15:21:

VBS script waar ik al iets mee kan doen gevonden online:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
:: (modified) original code by Salmon Trout - Oct 2014
:: - deletes files with creation time earlier than 08:00 and after 16:59 (on files from any day)
::

>  "%temp%\fhour.vbs" echo Set fso = CreateObject("Scripting.FileSystemObject")
>> "%temp%\fhour.vbs" echo Set f = fso.GetFile(trim(wscript.arguments(0)))
>> "%temp%\fhour.vbs" echo wscript.echo Hour (f.DateCreated)

for %%A in ("D:\Timelapse\test\*.jpg") do (
    for /f "delims=" %%B in ('cscript /nologo "%temp%\fhour.vbs" "%%~fA"') do (
        set "action="
        if %%B lss 8  set action=Delete
        if %%B geq 17 set action=Delete
        if /i not "%%~fA"=="%~f0" if defined action echo deleting "%%~fA" & del "%%~fA /s"
    )
)
pause
Brrrr. Wat zijn batch files toch brak. Powershell to the rescue!

Ik had vijf minuutjes over en heb dit ervan gemaakt.

PowerShell:
1
2
3
4
5
6
$Files = Get-ChildItem -Path 'D:\Timelapse\test' -Filter '*.jpg' -File -Recurse

ForEach ($Item in $Files) {
    If ($Item.LastWriteTime.Hour -lt 9) { Remove-Item -Path $Item.FullName }
    If ($Item.LastWriteTime.Hour -ge 17) { Remove-Item -Path $Item.FullName }
}


En het kan ook als oneliner:

PowerShell:
1
Get-ChildItem -Path 'D:\Timelapse\test' -Filter '*.jpg' -File -Recurse | Where { ($_.LastWriteTime.Hour -lt 9) -or ( $_.LastWriteTime.Hour -ge 17) } | Remove-Item

Alle reacties


Acties:
  • +1 Henk 'm!

  • Mar.tin
  • Registratie: Januari 2010
  • Laatst online: 12:48
[verwijderd]

[ Voor 96% gewijzigd door Mar.tin op 27-07-2022 14:33 ]


Acties:
  • +1 Henk 'm!

  • Soggney
  • Registratie: Mei 2009
  • Laatst online: 03-10 23:20

Soggney

Zeekomkommer

dit zou met powershell handiger kunnen, geen vbs nodig oid.
zoek daar maar even op.

Statement of Soggney, If you find anything offensive, I will not care. Inventory


Acties:
  • 0 Henk 'm!

  • Gutteguttegut
  • Registratie: Juli 2001
  • Laatst online: 30-09 13:47
Mar.tin schreef op maandag 16 december 2019 @ 15:25:
Kun je niet gewoon in de hoofdmap zoeken op *.jpg en dan alle foto's in 1 map knallen en dat scriptje dan draaien? :+

Of denk ik nu te makkelijk?

Of is er een andere reden dan dat de GoPro het zo doet dat hij ze zo neer zet?
Dat zou kunnen ware het niet dat ik dan eerst 183 mappen moet samen voegen...
Dat proces zou ik juist willen versnellen.
Soggney schreef op maandag 16 december 2019 @ 15:29:
dit zou met powershell handiger kunnen, geen vbs nodig oid.
zoek daar maar even op.
Ok, ga ik ook even naar kijken.

The birds turned into The Flying Dutchmen!


Acties:
  • 0 Henk 'm!

  • Mar.tin
  • Registratie: Januari 2010
  • Laatst online: 12:48
[verwijderd]

[ Voor 104% gewijzigd door Mar.tin op 27-07-2022 14:33 ]


Acties:
  • +1 Henk 'm!

  • Rensjuh
  • Registratie: Juli 2007
  • Laatst online: 13:34
Even schopje in de goeie richting met Powershell wat je nodig hebt:

Get-ChildItem
$_.LastWriteTime

Hiermee zou je alle bestanden op moeten kunnen halen.

PV Output


Acties:
  • 0 Henk 'm!

  • Gutteguttegut
  • Registratie: Juli 2001
  • Laatst online: 30-09 13:47
Mar.tin schreef op maandag 16 december 2019 @ 15:35:
[...]


Gewoon in de zoek-functie zoeken op *.jpg (of whatever de extensie) en zoeken in submappen aanzetten? O+
En dan alles selecteren en naar 1 map verplaatsen / kopiëren

[Afbeelding]
Dit werkt dus niet....

The birds turned into The Flying Dutchmen!


Acties:
  • +1 Henk 'm!

  • Mar.tin
  • Registratie: Januari 2010
  • Laatst online: 12:48
[verwijderd]

[ Voor 97% gewijzigd door Mar.tin op 27-07-2022 14:33 ]


Acties:
  • 0 Henk 'm!

  • Gutteguttegut
  • Registratie: Juli 2001
  • Laatst online: 30-09 13:47
Mar.tin schreef op maandag 16 december 2019 @ 15:55:
[...]


Sorry, maar wat precies werkt er niet? :>

Wat heb je geprobeerd naar aanleiding van mijn post en wat werkt er dan niet?

Je werkt wel onder windows?
Je zoekt niet op een netwerkschijf?
Je hebt wél de functie "zoek in submappen" aan staan?
De extensie van de bestanden waar je naar zoekt is correct?

Als je scriptje behoudens het niet meenemen van submappen werkt namelijk, is het even alles-in-1-map-zetten de enige resterende handeling, en dat is echt 2 minuten werk als je de zoekfunctie van windows op de juiste manier masseert O+
Dit werkt niet omdat alle bestanden onder elkaar komen te staan en ik dan nog handmatig moet gaan zoeken naar specifieke tijden (tussen 16:59 en 09:00) om handmatig te verwijderen..iets wat ik juist automatisch wil laten doen ;)
Desnoods via een extra stukje software, het moet mijn tijd welke ik hieraan besteed aanzienlijk verkorten.

Windows 10 Pro :P

The birds turned into The Flying Dutchmen!


Acties:
  • 0 Henk 'm!

  • Mar.tin
  • Registratie: Januari 2010
  • Laatst online: 12:48
[verwijderd]

[ Voor 96% gewijzigd door Mar.tin op 27-07-2022 14:33 ]


Acties:
  • +1 Henk 'm!

  • efan
  • Registratie: Januari 2001
  • Niet online
$min = Get-Date '09:00'
$max = Get-Date '16:00'

Get-ChildItem -Path "C:\fotomap" -recurse | Where {$_.lastwritetime -gt $min -and $_.lastwritetime -lt $max} | Remove-Item -Force

Acties:
  • 0 Henk 'm!

  • Soggney
  • Registratie: Mei 2009
  • Laatst online: 03-10 23:20

Soggney

Zeekomkommer

efan schreef op maandag 16 december 2019 @ 16:14:
$min = Get-Date '09:00'
$max = Get-Date '16:00'

Get-ChildItem -Path "C:\fotomap" -recurse | Where {$_.lastwritetime -gt $min -and $_.lastwritetime -lt $max} | Remove-Item -Force
well omdraaien, dit gaat nu alle bestanden tussen 9 en 16 u weggooien,
Where {$_.lastwritetime -gt $max -and $_.lastwritetime -lt $min}

Statement of Soggney, If you find anything offensive, I will not care. Inventory


Acties:
  • 0 Henk 'm!

  • itons
  • Registratie: Oktober 2003
  • Niet online
Soggney schreef op maandag 16 december 2019 @ 16:19:
[...]

well omdraaien, dit gaat nu alle bestanden tussen 9 en 16 u weggooien,
Where {$_.lastwritetime -gt $max -and $_.lastwritetime -lt $min}
En gaat ervanuit dat je de foto's vandaag genomen hebt >:)

Acties:
  • 0 Henk 'm!

  • Soggney
  • Registratie: Mei 2009
  • Laatst online: 03-10 23:20

Soggney

Zeekomkommer

itons schreef op maandag 16 december 2019 @ 16:29:
[...]


En gaat ervanuit dat je de foto's vandaag genomen hebt >:)
Klopt, hier heb je het gevaar dat de foto's van gisteren verwijderd worden (die de vorige dag nog niet gedelete zijn)
Sjah, het gevaar van scripten. De compare zal echt op het uur stuk moeten gebeuren en niet op de hele lastwritetime.

Statement of Soggney, If you find anything offensive, I will not care. Inventory


Acties:
  • 0 Henk 'm!

  • SmiGueL
  • Registratie: September 2005
  • Laatst online: 03-10 21:16
Gutteguttegut schreef op maandag 16 december 2019 @ 15:21:
Normaal ga ik dan handmatig door alle mappen heen (999 foto's per map) en verwijder alle foto's tussen 16:59 en 9:00uur.
Hebben de foto's geen timestamp in de bestandsnaam?
Mijn camera slaat foto's op als bijvoorbeeld: IMG20191216_165020.jpg

Want dan vul je bij zoeken rechtsboven gewoon
_17 OR _18 OR _19
etc. in.
(Of _17????.jpg indien er meer underscores in staan)
En dan delete je de resultaten. :P

Voordeel is dan dat je je huidige mappenstructuur kunt behouden. :)
(waarom je dat zou willen is weer wat anders.. Ik zou het hooguit per dag/maand doen en niet per 999)

[ Voor 6% gewijzigd door SmiGueL op 16-12-2019 17:02 ]

Delidded 4770K 4.7GHz @ H220 || Gigabyte Z87X-UD4H || 16GB @ 2400MHz || Gigabyte GTX 760 || 2x128GB Samsung 830 @ RAID-0 & WD 3 TB || Iiyama XB2483HSU-B1 || Synology DS916+ 3x6TB + 120GB SSD Cache || Synology DS213+ 6TB backup


Acties:
  • 0 Henk 'm!

  • Sandor_Clegane
  • Registratie: Januari 2012
  • Niet online

Sandor_Clegane

Fancy plans and pants to match

Als je filecreation timestamps kloppen, zou dit moeten werken:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
open System
open System.IO


let dir = @"z:\Development\"

let dryRun = true


let remove () = 
    Directory.GetFileSystemEntries(dir,"*.*",SearchOption.AllDirectories)
    |> Seq.map(fun x -> FileInfo(x))
    |> Seq.choose(fun x -> if x.CreationTime.ToString("HH") |> int < 7 && x.CreationTime.ToString("HH") |> int > 17  then Some x else None)
    |> Seq.map(fun x -> printfn "%s %s" x.FullName <| x.CreationTime.ToString("HH:mm");x)
    |> Seq.iter(fun x -> match dryRun with
                         | false -> 
                            printfn "Deleting %s" x.Name
                            File.Delete(x.FullName)
                         | true ->
                            ())


Je kunt hem opslaan als een FSX file en deze running met F# interactive via Visual Studio of VS Code.

Less alienation, more cooperation.


Acties:
  • Beste antwoord
  • +2 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

Gutteguttegut schreef op maandag 16 december 2019 @ 15:21:

VBS script waar ik al iets mee kan doen gevonden online:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
:: (modified) original code by Salmon Trout - Oct 2014
:: - deletes files with creation time earlier than 08:00 and after 16:59 (on files from any day)
::

>  "%temp%\fhour.vbs" echo Set fso = CreateObject("Scripting.FileSystemObject")
>> "%temp%\fhour.vbs" echo Set f = fso.GetFile(trim(wscript.arguments(0)))
>> "%temp%\fhour.vbs" echo wscript.echo Hour (f.DateCreated)

for %%A in ("D:\Timelapse\test\*.jpg") do (
    for /f "delims=" %%B in ('cscript /nologo "%temp%\fhour.vbs" "%%~fA"') do (
        set "action="
        if %%B lss 8  set action=Delete
        if %%B geq 17 set action=Delete
        if /i not "%%~fA"=="%~f0" if defined action echo deleting "%%~fA" & del "%%~fA /s"
    )
)
pause
Brrrr. Wat zijn batch files toch brak. Powershell to the rescue!

Ik had vijf minuutjes over en heb dit ervan gemaakt.

PowerShell:
1
2
3
4
5
6
$Files = Get-ChildItem -Path 'D:\Timelapse\test' -Filter '*.jpg' -File -Recurse

ForEach ($Item in $Files) {
    If ($Item.LastWriteTime.Hour -lt 9) { Remove-Item -Path $Item.FullName }
    If ($Item.LastWriteTime.Hour -ge 17) { Remove-Item -Path $Item.FullName }
}


En het kan ook als oneliner:

PowerShell:
1
Get-ChildItem -Path 'D:\Timelapse\test' -Filter '*.jpg' -File -Recurse | Where { ($_.LastWriteTime.Hour -lt 9) -or ( $_.LastWriteTime.Hour -ge 17) } | Remove-Item

  • Gutteguttegut
  • Registratie: Juli 2001
  • Laatst online: 30-09 13:47
Sandor_Clegane schreef op maandag 16 december 2019 @ 21:16:
Als je filecreation timestamps kloppen, zou dit moeten werken:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
open System
open System.IO


let dir = @"z:\Development\"

let dryRun = true


let remove () = 
    Directory.GetFileSystemEntries(dir,"*.*",SearchOption.AllDirectories)
    |> Seq.map(fun x -> FileInfo(x))
    |> Seq.choose(fun x -> if x.CreationTime.ToString("HH") |> int < 7 && x.CreationTime.ToString("HH") |> int > 17  then Some x else None)
    |> Seq.map(fun x -> printfn "%s %s" x.FullName <| x.CreationTime.ToString("HH:mm");x)
    |> Seq.iter(fun x -> match dryRun with
                         | false -> 
                            printfn "Deleting %s" x.Name
                            File.Delete(x.FullName)
                         | true ->
                            ())


Je kunt hem opslaan als een FSX file en deze running met F# interactive via Visual Studio of VS Code.
Ik heb echt geen idee wat ik hiermee kan doen, zoals ik aan gaf, ik heb 0 ervaring met dit soort dingen....
downtime schreef op donderdag 19 december 2019 @ 00:39:
[...]

Brrrr. Wat zijn batch files toch brak. Powershell to the rescue!

Ik had vijf minuutjes over en heb dit ervan gemaakt.

PowerShell:
1
2
3
4
5
6
$Files = Get-ChildItem -Path 'D:\Timelapse\test' -Filter '*.jpg' -File -Recurse

ForEach ($Item in $Files) {
    If ($Item.LastWriteTime.Hour -lt 9) { Remove-Item -Path $Item.FullName }
    If ($Item.LastWriteTime.Hour -ge 17) { Remove-Item -Path $Item.FullName }
}


En het kan ook als oneliner:

PowerShell:
1
Get-ChildItem -Path 'D:\Timelapse\test' -Filter '*.jpg' -File -Recurse | Where { ($_.LastWriteTime.Hour -lt 9) -or ( $_.LastWriteTime.Hour -ge 17) } | Remove-Item
Ok, ik snap het niet helemaal maar heb het volgende geprobeerd.
Open Powershell.
Copy paste de code en druk dan op Enter.

Bij beide opties gebeurt er niets (nouja, hij lijkt bezig maar ik zie geen bestanden verdwijnen), ook niet als ik de *.jpg naar *.JPG verander....

[edit]
Het werkt wel, alleen niet met submappen.
Nu heb ik alle foto's al in drie grote mappen gezet (3x 128GB geheugen kaart) van 55.000+ foto's per map.
Daar is LRTimelapse nu even mee bezig dus daarmee kan ik het nog niet testen maar het lijkt te gaan werken in de map zelf, submappen dus niet.

[edit2]
Er gebeurd wel iets met de aanmaakdatum van de de bestanden, deze verdwijnt en je kunt het script daarom maar 1x in een specifieke map gebruiken (een tweede run zou na 17:00 gewoon alle bestanden verwijderen).
Het zou fijn zijn als de originele EXIF blijft bestaan.

[ Voor 12% gewijzigd door Gutteguttegut op 19-12-2019 04:47 ]

The birds turned into The Flying Dutchmen!

Pagina: 1