dominik50
Goto Top

Nur eine bestimmte Menge an Dateien verschieben

Hallo

stehe aktuell vor dem Problem das ich einen Ordner mit mehreren 1000 pdf Dateien habe.
Diese möchte ich in einen anderen Ordner kopieren welcher von einem Programm überwacht wir.
Leider kann dieser nicht so viele auf einmal verarbeiten.
Gibt es eine Möglichkeit mit mov das immer nur 500 verschoben werden?

Danke

Content-Key: 41231609644

Url: https://administrator.de/contentid/41231609644

Printed on: April 27, 2024 at 16:04 o'clock

Member: em-pie
em-pie Jan 20, 2024 at 22:22:15 (UTC)
Goto Top
Moin,

Nimm die Powershell:

Get-ChildItem()
Und gepiped dann Select -Last 500
Mit dem Ergebnis ein Move-Item()

Damit solltest was anfangen können.

Das ganze dann solange laufen lassen, wie es Dateien in dem Ordner gibt..
Member: Dominik50
Dominik50 Jan 20, 2024 at 22:33:52 (UTC)
Goto Top
Danke für die schnelle Antwort. Problem ist das ich mit Powershell noch nie gearbeitet habe
Member: Cloudrakete
Cloudrakete Jan 20, 2024 at 22:48:39 (UTC)
Goto Top
Moin,

wenn das Skript dauerhaft laufen soll, hast Du verschiedene Optionen.
Du könntest entweder eine while() Schleife bauen und das Skript einfach "hart beenden" wenn du es nicht mehr benötigst.
Ansonsten kannst Du auch einen Scheduled Task bauen, welche z.B. alle 5 Minuten das o.g. Skript ausführt.

Für das Erstellen eines Tasks hier mal schauen -> https://lazyadmin.nl/powershell/how-to-create-a-powershell-scheduled-tas ...


Was die Schnpisel von em-pie angeht:

PowerShell ISE öffnen (Ist auf jedem Windows vorinstalliert)
Code einfügen:

Get-ChildItem -Path "C:\Temp\pdf" |  Where-Object {$_.Extension -eq '.pdf'} | select -Last 500 | Move-Item -Destination "C:\Temp\pdf\dest"  

In dem Codebeispiel gehen wir davon aus, dass "C:\Temp\pdf" der Quellordner ist. "C:\Temp\pdf\dest" ist der Zielordner, wo die letzten 500 PDF Files verschoben werden.

Wenn Du das ganze nun als .ps1 speicherst, kannst du das Skript wie im Link erklärt in einem Scheduled Task platzieren und automatisiert ausführen lassen.
Member: Dominik50
Dominik50 Jan 21, 2024 at 01:32:23 (UTC)
Goto Top
Super danke soweit funktioniert es. Problem ist da wenn ich in der Planung alle 2 Minuten wiederholen eingebe macht er es genau 2 mal dann beendet er es
Member: Cloudrakete
Cloudrakete Jan 21, 2024 at 11:30:19 (UTC)
Goto Top
Hi,

dann kontrolliere im angelegten Task den "Triggers" Tab und den dort hinterlegten Trigger.
In den erweiterten Einstellungen musst du "Repeat task every" benennen. Ich meine, die kleinste Einheit sind hier 5 Minuten.
Daneben ist noch ein Dropdown für die Dauer, da solltest du unendlich wählen, außer du weißt, dass du den Task nur sehr kurze Zeit benötigst.
Du solltest bei solchen Settings dann aber auch "Stop task if its run longer than" nutzen. Wähle hier einfach den kleinsten Wert.

Das beendet den Task automatisch nach der ausgewählten Zeit, sollte dieser sich z.B. aufhängen oder in einen nicht abfangbaren Fehler laufen.
Member: erikro
erikro Jan 22, 2024 at 12:47:52 (UTC)
Goto Top
Moin,

Zitat von @Cloudrakete:
PowerShell ISE öffnen (Ist auf jedem Windows vorinstalliert)
Code einfügen:

Get-ChildItem -Path "C:\Temp\pdf" |  Where-Object {$_.Extension -eq '.pdf'} | select -Last 500 | Move-Item -Destination "C:\Temp\pdf\dest"  

Das ist pfui und nicht sonderlich performant. Hole niemals Daten, die Du nicht brauchst. Besser gleich beim Holen filtern:

Get-ChildItem -Path "C:\Temp\pdf" -filter *.pdf | select -Last 500 | Move-Item -Destination "C:\Temp\pdf\dest"  

Liebe Grüße

Erik