skynetworks
Goto Top

Batch Dateien verschieben in Verzeichis welches Bestandteil des Dateinamens ist

Hallo zusammen,

ich habe eine kleine Herausforderung:
Ich muss per Batch Dateien in Unterverzeichnisse verschieben.
Soweit erstmal nicht schwer face-smile
Die Dateien haben unterschiedliche Dateiendungen, enthalten aber alle gleichermaßen das Sortierkennzeichen ABE_123 wobei ABE_ immer gleich bleibt und sich nur die 3 stellige Nummer ändert.
Gleichermaßen gibt es auch einen Verzeichnisbaum, die sich - hier im Beispiel - mit ABE_123 bzw. ABE_ und der 3 stelligen Nummer decken, wo die Dateien dann reingeschoben werden sollen.
Man müßte also aus dem Dateinamen den String ABE_123 in eine Variable schreiben, mit welcher sich der move Befehl dann einfach zusammenbauen läßt und eine For-Schleife bauen, die alle Dateien im Quellverzeichnis abarbeitet.
Vielleicht hat jemand einen praktischen Tip für mich.

Danke & viele Grüße
Thomas

Content-Key: 278269

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

Printed on: April 19, 2024 at 20:04 o'clock

Member: SeriousEE
SeriousEE Jul 24, 2015 at 12:54:47 (UTC)
Goto Top
Hi,

Mein Lösungsansatz (fast immer in Powershell) wäre folgender:

$sourcepath = "C:\sourcefolder\"   
$destpath = "C:\destination\"  
$files = Get-ChildItem -Path $sourcepath
if ($files -ne $null) {
   foreach ($file in $files) {
     $subfolder = $file.Name.Substring(0,7)
     $subfolder = $subfolder.Substring(4)
     $destinationfolder = $destpath + "ABE_"+$subfolder  
     if (-Not (Test-Path $destinationfolder)) {
        New-Item $destinationfolder -type directory
     }
     Move-Item $file.Fullname $destinationfolder
   }
}

Grüße
Member: skynetworks
skynetworks Jul 24, 2015 at 15:14:40 (UTC)
Goto Top
Hi,

danke für die schnelle Antwort!

Ich glaube hier passt es noch nicht ganz:

06.

$subfolder = $file.Name.Substring(0,7)

07.

$subfolder = $subfolder.Substring(4)

Die Dateinamen um die es geht sind recht unterschiedlich, z.B. Informationsblatt_ABE_123.pdf oder Anleitung_ABE_123_4711.doc.
Das Sortierkennzeichen ABE_123 kommt in jedem Dateinamen vor, aber immer an unterschiedlichen Stellen.

Viele Grüße
Thomas
Member: Gersen
Solution Gersen Jul 24, 2015 updated at 21:15:26 (UTC)
Goto Top
Hallo,

ergänzend zur Vorarbeit des Kollegen:
$regex = [regex]"ABE_\d{3}"
foreach ($file in $files) {
   $subfolder=$regex.Matches($file.name).Value
   $destinationfolder = $destpath + $subfolder
   ...

Gruß,
Gersen
Member: colinardo
Solution colinardo Jul 24, 2015 updated at 21:15:21 (UTC)
Goto Top
Und das ganze dann noch etwas verkürzt face-smile
$sourcepath = 'C:\quelle'  
$destination = 'C:\ziel'  
gci $sourcepath | ?{!$_.PSIsContainer -and $_.BaseName -match '(ABE_\d{3})'} | %{  
    $dest = "$destination\$($matches[1])"  
    if (!(Test-Path $dest)){md $dest}
    move-item $_.Fullname $dest
}
Grüße Uwe
Member: skynetworks
skynetworks Jul 24, 2015 at 21:15:14 (UTC)
Goto Top
Hallo Leute,

echt super - funktioniert nun mit dem Script von Uwe einwandfrei face-smile face-smile face-smile
Tausend dank an alle!

Viele Grüße
Thomas