pirat-ohne-bart
Goto Top

Dateien mittels Inhalt zwischen zwei Zeichen sortieren

Hallo zusammen,

ich habe folgendes Anliegen:
Ich habe mehrere PDF-Dateien unsortiert in einem Ordner liegen, die nach einem bestimmten Prinzip aufgebaut sind, beispielsweise:
32244_333444_abcdef.pdf
48482_333444_833739_737383.pdf
HFJDJ_12000_43.pdf
993393939_12000_7FE.pdf

Ich würde gerne mithilfe einer Batchdatei die vorliegenden Dateien in Ordner einsortieren lassen. Die Ordner wurden bereits erstellt und sind benannt wie der Inhalt zwischen dem ersten und dem zweiten „_“-Zeichen, in dem Fall also z.B. „333444“ und „12000“.
Ich habe schon mehrere Sachen ausprobiert, kriege aber irgendwie keine Lösung hin. Könnt ihr mir da vielleicht helfen?

Vielen Dank an alle die mir helfen wollen und liebe Grüße
pirat-ohne-bart

Content-Key: 476362

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

Printed on: May 3, 2024 at 20:05 o'clock

Mitglied: 140447
Solution 140447 Jul 22, 2019 at 13:58:50 (UTC)
Goto Top
Member: erikro
Solution erikro Jul 22, 2019 at 14:09:55 (UTC)
Goto Top
Moin,

mit der Powershell:

$files = Get-ChildItem -File

foreach($file in $files) {

    $dir = $($file.basename.split("_"))[1]  

    if(!$(test-path $dir)) {

        new-item -ItemType "directory" -path $dir  

    }
    Move-Item $file $dir

}

Die Zielverzeichnisse liegen unterhalb des Verzeichnisses, in dem die Dateien sich befinden. Das Zielverzeichnis wird, sofern nicht vorhanden, erstellt.

hth

Erik
Member: colinardo
Solution colinardo Jul 23, 2019 updated at 18:25:37 (UTC)
Goto Top
Servus,
Quell- und Ziel-Ordner anpassen. Kommentare siehe Quellcode.
back-to-topBatch
@echo off &setlocal
:: QUELLORDNER
set "quelle=D:\quelle"  
:: ZIELORDNER
set "ziel=D:\ziel"  
:: Für jede PDF Datei in der Quelle, zerlege den Basename mit _ und übernehme nur den zweiten Token in die Variable %%b, erstelle Ordner falls noch nicht geschehen und verschiebe Datei in den Ordner
for %%a in ("%quelle%\*.pdf") do for /f "tokens=2 delims=_" %%b in ("%%~na") do (  
    if not exist "%ziel%\%%b" md "%ziel%\%%b"  
    move "%%a" "%ziel%\%%b\"  
)
back-to-topPowershell
# Quellordner
$quelle = "D:\quelle"  
# Zielordner
$ziel = "D:\ziel"  
# Für jedes PDF in der Quelle checke ob der Basename den Anforderungen genügt, gruppiere die Dateien nach dem Regex-Match erstelle den Ordner falls noch nicht geschehen und verschiebe die Gruppe von Dateien in den Zielordner 
gci $quelle -Filter *.pdf -File | ?{$_.Basename -match '_([^_]+)'} | group {$matches[1]} | %{  
    $target = "$ziel\$($_.Name)"  
    if(!(Test-Path $target)){md $target -Force | out-null}
    $_.Group | move -Destination $target -Force -Verbose -WhatIf
}
Grüße Uwe
Member: pirat-ohne-bart
pirat-ohne-bart Jul 25, 2019 at 06:12:15 (UTC)
Goto Top
Danke euch allen für eure Hilfe! Mein Problem wurde gelöst face-smile