Ongewijzigde mappen sinds x zoeken

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • cdr
  • Registratie: Mei 2007
  • Laatst online: 20-03 11:58
Hoe krijg ik in Windows 10-11 een lijst van (sub)mappen die geen bestanden bevatten die gewijzigd zijn sinds een bepaalde datum, bv. 01-01-2024? Dus zodra er in een map ook maar 1 bestand staat dat recenter gewijzigd werd, mag die map niet in de lijst verschijnen.

Ik heb gemerkt dat ik niet verder kan gaan op het attribuut 'datum gewijzigd' op mapniveau omdat die datum niet altijd rekening houdt met de inhoud van (sub)mappen.

Beste antwoord (via cdr op 03-04-2024 19:55)


  • Danielson
  • Registratie: Januari 2003
  • Laatst online: 16:08
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$mainFolder = "C:\Path\To\Main\Folder"
$targetDate = Get-Date "01-01-2024"

function Get-ChildFoldersNoRecentFiles {
    param (
        [string]$folderPath
    )

    $folders = Get-ChildItem -Path $folderPath -Directory
    foreach ($folder in $folders) {
        $recentFiles = Get-ChildItem -Path $folder.FullName -File | Where-Object { $_.LastWriteTime -gt $targetDate }
        if (-not $recentFiles) {
            Write-Output $folder.FullName
        }
        Get-ChildFoldersNoRecentFiles -folderPath $folder.FullName
    }
}

Get-ChildFoldersNoRecentFiles -folderPath $mainFolder

Alle reacties


Acties:
  • 0 Henk 'm!

  • Tdv98
  • Registratie: November 2023
  • Laatst online: 08-05 13:57
Waarin wil je dit doen? excel? een .exe die in kladblok een lijst maakt met mapnamen?

Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Danielson
  • Registratie: Januari 2003
  • Laatst online: 16:08
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$mainFolder = "C:\Path\To\Main\Folder"
$targetDate = Get-Date "01-01-2024"

function Get-ChildFoldersNoRecentFiles {
    param (
        [string]$folderPath
    )

    $folders = Get-ChildItem -Path $folderPath -Directory
    foreach ($folder in $folders) {
        $recentFiles = Get-ChildItem -Path $folder.FullName -File | Where-Object { $_.LastWriteTime -gt $targetDate }
        if (-not $recentFiles) {
            Write-Output $folder.FullName
        }
        Get-ChildFoldersNoRecentFiles -folderPath $folder.FullName
    }
}

Get-ChildFoldersNoRecentFiles -folderPath $mainFolder

Acties:
  • 0 Henk 'm!

  • cdr
  • Registratie: Mei 2007
  • Laatst online: 20-03 11:58
Tdv98 schreef op dinsdag 2 april 2024 @ 15:47:
Waarin wil je dit doen? excel? een .exe die in kladblok een lijst maakt met mapnamen?
Maakt mij niet uit waarin. Het resultaat telt ;-)

Acties:
  • 0 Henk 'm!

  • cdr
  • Registratie: Mei 2007
  • Laatst online: 20-03 11:58
Danielson schreef op dinsdag 2 april 2024 @ 15:50:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$mainFolder = "C:\Path\To\Main\Folder"
$targetDate = Get-Date "01-01-2024"

function Get-ChildFoldersNoRecentFiles {
    param (
        [string]$folderPath
    )

    $folders = Get-ChildItem -Path $folderPath -Directory
    foreach ($folder in $folders) {
        $recentFiles = Get-ChildItem -Path $folder.FullName -File | Where-Object { $_.LastWriteTime -gt $targetDate }
        if (-not $recentFiles) {
            Write-Output $folder.FullName
        }
        Get-ChildFoldersNoRecentFiles -folderPath $folder.FullName
    }
}

Get-ChildFoldersNoRecentFiles -folderPath $mainFolder
Dit werkt nagenoeg perfect, Danielson, bedankt! Ideaal zou zijn dat bij een wijziging in een submap op bv. niveau 4 de bovenliggende mappen op alle niveaus (1 2 3) uit de lijst blijven maar dat is waarschijnlijk moeilijker te verwezenlijken.
Kan je me eventueel nog op weg zetten om de lijst in een tekstbestand weg te schrijven? Mijn kennis van PS behoort helaas tot de noemer "quasi onbestaande" :-(