PowerShell PowerShell: Sortiere Dateien anhand des "Authors" Attribut in Ordner

Henning74

Cadet 1st Year
Registriert
Nov. 2021
Beiträge
9
Moin,

ich versuche mir gerade ein Powershell Skript zu basteln, welches mir im Windows Explorer in einem Ordner befindliche Dateien in Unterordner kopiert. Die Unterordner sollen nach dem "Authors" Attribut benannt sein.

Ich habe ein Skript gefunden, was jeden Datei in einen Ordner kopiert und den Ordner nach der Datei benennt: das klappt.

Und ich habe ein Skript, welches mir die Dateien und das Authors Attribut (falls vorhanden) auflistet.

Da ich aber ein totaler noob bin, bekomme ich die zwei Skripte nicht richtig zusammen.

Kann mir da jemand helfen oder vielleicht ein Programm nennen, welches diese Aufgabe schon erledigt?

Skript für das kopieren und erstellen eines Ordners:

$BasePath = "E:\Sorting"
$FilesGreaterThen = 1KB
$MoveAllFilesToRoot = $True

$AllFiles = Get-ChildItem -Path $BasePath -Recurse -File | Where-Object {$_.Length -Gt $FilesGreaterThen}

$AllFiles | ForEach-Object {
$File = ($.DirectoryName + "\" + $.Name)

If($MoveAllFilesToRoot) {
$Directory = ($BasePath + "\" + $_.BaseName)
} Else {
$Directory = ($.DirectoryName + "\" + $.BaseName)
}

New-Item -ItemType Directory -Force -Path $Directory
Move-Item -Path $File -Destination $Directory

If(-Not(Test-Path($_.DirectoryName + "\*"))) { #Delete source directory if empty
Remove-Item -Path $_.DirectoryName
}
}


Skript zum Auflisten:

$shell = New-Object -com shell.application
gci | select name,
@{N='Author';E={$shell.NameSpace(($.DirectoryName)).ParseName(($.Name)).ExtendedProperty("System.Author")}}
 
ok.. mit etwas Ki Hilfe und ausprobieren:

# Pfad des Quellordners angeben
$sourcePath = "C:\test"

# Pfad des Zielordners angeben
$destinationFolder = "C:\test2"

# Create the destination folder if it doesn't exist
if (!(Test-Path $destinationFolder)) {
New-Item -ItemType Directory -Path $destinationFolder
}

# Get the list of files in the source folder
$files = Get-ChildItem $sourceFolder -File

foreach ($file in $files) {
$author = (New-Object -ComObject Shell.Application).NameSpace($file.DirectoryName).ParseName($file.Name).ExtendedProperty("System.Author")
$authorFolder = Join-Path $destinationFolder "$author"

# Create the author folder if it doesn't exist
if (!(Test-Path $authorFolder)) {
New-Item -ItemType Directory -Path $authorFolder
}

# Copy the file to the author folder
Copy-Item $file.FullName -Destination $authorFolder
}


Es scheint so weit zu funktionieren, werde es jetzt noch testen, lasse es aber mal hier falls auch jemand keine Lust auf händisches Kopieren hat :-)
 
Zurück
Oben