143350
Goto Top

Jedes dritte Bild in bestimmten Ordner verschieben

Hallo Liebe Forenmitglieder,

da ich nach erfolgloser Google-Suche auf einen Beitrag hier im Forum gestoßen bin, erhoffe ich mir von Euch
den passenden Rat bzw. eine passende Lösung.

Ich muss in der Arbeit immer wieder mit einem Oszilloskop Messungen durchführen. Das Ergebnis wird als
png Grafik auf einem USB Stick gespeichert.
Meistens sind das 180 Bilder - Nummerierung ist immer von 000 bis 179.
Später müssen die Ergebnisse auf unserem Server gesichert werden.

Kennt Ihr eine Möglichkeit - gerne per Batch oder ein Tool, mit dem ich sagen kann, verschiebe jede dritte
Datei in einen bestimmten Ordner.
Wenn jede dritte verschoben wurde, muss jede zweite wiederum in ein bestimmtes Verzeichnis verschoben werden.
Und wenn diese dann abgelegt sind, muss der Rest wiederum in ein Verzeichnis.

Natürlich kann ich gerne 3 Batch Dateien erzeugen um dies zu realisieren oder auch immer wieder die Zielverzeichnisse
abändern - alles ist einfacher und schneller als derzeit alles immer wieder händisch zu erledigen.

In einzelnen Fällen sind es auch dopplet so viele Messungen als auch doppelt so viele Bilder.

Ich bin gespannt auf Eure Vorschläge, und Danke Euch schon jetzt von Herzen für Eure Zeit die Ihr investiert.

Grüße
BommelMelo

Content-ID: 555489

Url: https://administrator.de/forum/jedes-dritte-bild-in-bestimmten-ordner-verschieben-555489.html

Ausgedruckt am: 22.04.2025 um 11:04 Uhr

SeaStorm
SeaStorm 06.03.2020 um 22:35:07 Uhr
Goto Top
Hi


sowas z.B? (quick&dirty und nicht wirklich getestet)
$files = Get-ChildItem "C:\temp\test" -Filter *.png | Sort-Object { [regex]::Replace($_.Name, '\d+', { $args.Value.PadLeft(20) }) }  

for( $id = 2; $id -lt $files.count; $id += 3 ) {
    $files[$id] | Move-Item -Destination "C:\temp\test\drittel"  
}


$files = Get-ChildItem "C:\temp\test" -Filter *.png | Sort-Object { [regex]::Replace($_.Name, '\d+', { $args.Value.PadLeft(20) }) }  

for( $id = 1; $id -lt $files.count; $id += 2 ) {
    $files[$id] | Move-Item -Destination "C:\temp\test\halb"  
}

Move-Item -Path "C:\temp\test\*.png" -Destination "C:\temp\test\rest"   
NetzwerkDude
NetzwerkDude 06.03.2020 um 23:33:33 Uhr
Goto Top
Mein Vorschlag kurz vor Mitternacht:

param(
    $Source,
    $Destination,
    $Every = 3
)

$AllFiles = Get-ChildItem -Path $Source -File | Sort-Object

$Index= 0
$FilesToCopy = @()

while ($Index -lt $AllFiles.Length){
    $FilesToCopy += $AllFiles[$Index]
    $Index = $Index + $Every
}

$FilesToCopy | Move-Item -Destination $Destination

Jetzt kannst du das skript als z.B. PickNMove.ps1 anbspeichern und dann so aufrufen:
.\PickNMove.ps1 -Source "<Pfad wo die Originale sind> -Destination "<Pfad wohn die sollen>" -Every <Zahl welche X-te Datei verschoben soll>  

So zurück zu while ! sleep apply milk && check diper

MFG
N-Dude
143127
143127 07.03.2020 aktualisiert um 09:50:50 Uhr
Goto Top
Und wenn dann noch ein Powershell Einzeiler zum Frühstück genehm ist
gci 'd:\ordner' -Filter *.png -file | ?{([int]$_.Basename +1) % 3 -eq 0} | move-item -Destination 'd:\ziel' -verbose  
143350
143350 07.03.2020 um 12:37:29 Uhr
Goto Top
Hallo SeaStrom, NetzwerkDude und vibrations,

vielen, vielen Dank Euch für Eure Hilfe. Leider kann ich das erst ab kommende
Woche austesten.

Dennoch würde ich von Euch eine kleine Erläuterung benötigen, denn ich bin weder in
Batch programmieren, noch in PowerShell etc. fit.

@SeaStorm: Müsste man Deinen Code als Bacht abspeichern? Und wenn ich gezielte
Ordnernamen angebe, wie z.B. DUT_1, DUT_2 und DUT_3 - an welchen Stellen müsste
ich Deinen Code anpassen?

@NetzwerkDude: Leider weiss ich nicht, wie ich ein Skript abspeicher. Hier würde ich
eine kleine Einweisung dazu Deinerseits benötigen das Skript zu erstellen.
Kannst Du mir noch sagen, was PickNMove ist? Sorry, wenn ich vielleicht etwas dumm
Frage.

@143127: Leider kenne ich mich mit Powershell nicht aus. Aber wenn ich mir Deinen
Code ansehe, benötige ich von Dir auch die Position, die ich ändern muss, wenn jedes
dritte Bild verschoben ist und ich dann jedes zweite verschieben möchte.
Ist das
gci 'd:\ordner' -Filter *.png -file | ?{([int]$_.Basename +1) % 3 -eq 0} | move-item -Destination 'd:\ziel' -verbose
folgende Position:
gci 'd:\ordner' -Filter *.png -file | ?{([int]$_.Basename +1) % 3 -eq 0} | move-item -Destination 'd:\ziel' -verbose

Vielen herzlichen Dank für Eure Vorschläge und Hilfe
Es grüßt Euch herzlich

BommelMelo
SeaStorm
SeaStorm 07.03.2020 aktualisiert um 19:24:56 Uhr
Goto Top
Zitat von @143350:
@SeaStorm: Müsste man Deinen Code als Bacht abspeichern?
das ist powershell.
das Script als .ps1 speichern, dann kannst du das ausführen
Und wenn ich gezielte
Ordnernamen angebe, wie z.B. DUT_1, DUT_2 und DUT_3 - an welchen Stellen müsste
ich Deinen Code anpassen?
Äh ... die Pfade sind doch eigentlich ziemlich einfach erkennbar ?!
Etwas "einfacher" und anpassbarer:


$source = "C:\temp\test"  
$target_jedesdritte = "C:\temp\test\drittel"  
$target_jedeszweite = "C:\temp\test\halb"  
$target_rest = "C:\temp\test\rest"  
$files = Get-ChildItem $source -Filter *.png | Sort-Object { [regex]::Replace($_.Name, '\d+', { $args.Value.PadLeft(20) }) }  

for( $id = 2; $id -lt $files.count; $id += 3 ) {
    $files[$id] | Move-Item -Destination $target_jedesdritte
}


$files = Get-ChildItem $source -Filter *.png | Sort-Object { [regex]::Replace($_.Name, '\d+', { $args.Value.PadLeft(20) }) }  

for( $id = 1; $id -lt $files.count; $id += 2 ) {
    $files[$id] | Move-Item -Destination $target_jedeszweite
}

Move-Item -Path "$($source)\*.png" -Destination $target_rest   

Wenn du das jetzt nicht selbst anpassen kannst weiss ich auch nicht ...
143350
143350 08.03.2020 um 22:23:06 Uhr
Goto Top
Hallo SeaStrom,

danke für Deine Rückmeldung. Bisher hatte ich noch keine Berührungspunkte mit PowerShell.
Da muss ich mich kurz oder auch etwas mehr damit befassen.

Ich werde Dir aber Rückmeldung geben - kann es ja leider frühestens morgen ausprobieren.

Vielen Dank für Deine Hilfe und Lösung.

Herzliche Grüße
Bommel