balluf
Goto Top

Dateien verschieben abhängig von mehreren Separatoren

Hallo Leute,
eigentlich habe ich schon fast das passende Script für mein Anliegen gefunden aber leider nur fast.
Der nette User @bastla: beschreibt hier wenn der Separator mehrere Zeichen umfasst, müsste der Batch anders gestaltet werden und genau das ist das was ich bräuchte.
Es sind sogar mehrere Separatoren bei mir notwendig.
Sie lauten: .D0 .D1 .D2
Ich hoffe ihr könnt helfen.


Zitat von @bastla:


Wenn der Separator mehrere Zeichen umfasst, müsste der Batch anders gestaltet werden - ansonsten lässt sich aber zumindest mit einer Variablen die Anpassung vereinfachen (auf speziellen Wunsch ausnahmsweise sogar mit Kommentaren face-wink):
@echo off & setlocal
set "Ordner=D:\Dein Ordner"  
set "Separator=_"  

REM voruebergehend in den angegebenen Ordner wechseln
pushd "%Ordner%"  
REM in einer Schleife alle passenden Dateien (mit dem Separator im Namen; keine Ordner) abarbeiten
for /f "delims=" %%i in ('dir /b/a-d "*%Separator%*"') do (  
    REM Anfangsstring isolieren
    for /f "delims=%Separator%" %%a in ("%%i") do (  
        REM Anzahl der mit dem Anfangsstring beginnenden Dateien ermitteln und
        REM wenn mehr als eine Datei vorhanden ist ...
        for /f %%n in ('dir "%%a%Separator%*.*"2^>nul^|findstr "Datei(en)"') do if %%n gtr 1 (  
            REM ... den Zielordner erstellen (falls bereits vorhanden Fehlermeldung nicht anzeigen) ...
            md "%%a" 2>nul  
            REM ... und alle entsprechenden Dateien in den Zielordner verschieben
            move "%%a%Separator%*.*" "%%a">nul  
        )
    )
)
REM Wechsel des Ordners rückgängig machen
popd

Content-ID: 7060838942

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

Ausgedruckt am: 24.11.2024 um 18:11 Uhr

Intellidance
Intellidance 08.05.2023 um 09:49:46 Uhr
Goto Top
Hm, ich würde vorschlagen das eher in Powershell zu machen, da gerade arbeiten mit Arrays, suchen in Strings usw. dort deutlich besser funktioniert.

Ich habe ohne ohne Bezug auf das ursprüngliche Script jedoch gerade nicht so ganz das Verständnis was genau das Ziel des Scripts ist.

Könntest du ein Beispiel DEINER Dateinamen geben + wie bei 2 solcher Dateien die Zielstruktur aussehen sollte wenn das Script gelaufen ist?
7010350221
Lösung 7010350221 08.05.2023 aktualisiert um 13:45:24 Uhr
Goto Top
Hi.
Mit PowerShell schnell abgehakt
Get-ChildItem  'D:\DeinOrdner' -File | ?{$_.Basename -match '(.+)\.D[0-2]'} | move-item -Destination {(new-item -type dir "$($_.DirectoryName)\$($matches[1])" -Force).Fullname} -verbose  
Grüße
Balluf
Balluf 08.05.2023 um 15:23:59 Uhr
Goto Top
Funktioniert perfekt, vielen Dank für die schnelle Lösung @7010350221:
7010350221
7010350221 08.05.2023 um 15:25:30 Uhr
Goto Top
Keine Ursache, wenns hilft face-smile.