squischi
Goto Top

BAT - Dateien in Ordner verschieben nach Schema

Ich bitte um Ihre Hilfe, um einen Teil einer etwas längeren BAT zu schreiben, der die Dateien (Ordner, PDFs, Docx, usw.) in einem variablen Ordner (Input) automatisch in den entsprechenden Zielordner (Target) sortiert.

Alle Inputordner beginnen mit einer laufenden Nummer: abc_mehr Text, def_Ordner, ghi_Ordner, usw.

Die Zielordner wurden vorab bereits nach demselben Schema benannt: abc, def, ghi.

Im nächsten Schritt müssten der Inputordner und der korrespondierende Zielordner gematched werden und der Inhalt des Inputordners verschoben werden.

Die Daten im Inputordner sollten also automatisch dem entsprechenden Zielordner mit derselben Nummer zugewiesen werden.

Bisher habe ich folgendes geschrieben:
set Quelle="C:\Data\Inputordner"  
set Ziel="C:\Data\Targetordner"  

for /f "Delims=" %%a in ('dir /b /ad "%Quelle%"') do (  
    For /f "tokens=1 delims=_ " %%t in ("%%~na") do (  
        move /Y "%%~a" "%Ziel%\%%t\"  
    )
)

Diese Methode kann bisher aber weder den richtigen Pfad finden, noch den Inhalt des jeweiligen Inputordners in den Zielordnerverschieben...

Vielleicht ja einer von Ihnen eine Idee!

Beste Grüße

Content-ID: 656554

Url: https://administrator.de/forum/bat-dateien-in-ordner-verschieben-nach-schema-656554.html

Ausgedruckt am: 08.04.2025 um 12:04 Uhr

Doskias
Doskias 26.02.2021 aktualisiert um 11:21:04 Uhr
Goto Top
Moin,

hast du dich gelöscht, neu angemeldet und stellst jetzt die gleiche Frage noch einmal, die du hier schon gestellt hast oder wird das Forum grade benutzt, dass erfahrene Admins eure Schulaufgaben machen?

CMD: Move Dateien in einen anderen Ordner gehört ja auch dazu.

Gruß
Doskias
Squischi
Squischi 26.02.2021 aktualisiert um 11:23:59 Uhr
Goto Top
Moin,

ja ich habe bei dem Account ständig Probleme gehabt und mich dann nochmal neu angemeldet mit derselben E-Mail-Adresse.
Da ich meine Frage nicht mehr finden konnte, bin ich davon ausgegangen, dass sich diese dann auch gelöscht hatte.

Das Problem hatte sich leider in dem vorgelagerten Post nicht vollständig gelöscht bzw. habe ich die Frage etwas missverständlich ausgedrückt...
TK1987
Lösung TK1987 26.02.2021 aktualisiert um 11:28:32 Uhr
Goto Top
Moin,

Zitat von @Squischi:
for /f "Delims=" %%a in ('dir /b /ad "%Quelle%"') do (  
         move /Y "%%~a" "%Ziel%\%%t\"  
...
dir /b gibt nur Namen ohne Pfad aus. Deine Schleifenvariable hat also keinen Pfad, diesen musst du immer mit angeben. Darüber hinaus würdest du mit dem obigen move Befehl den kompletten Ordner (z.B. 001_mehr Text) in den Zielordner schieben, nicht dessen Inhalt.
move /Y "%Quelle%\%%a\*" "%Ziel%\%%t\"  

Gruß Thomas
Squischi
Squischi 26.02.2021 um 11:32:29 Uhr
Goto Top
Ahh vielen Dank!
Daran habe ich nicht gedacht!

Beste Grüße
147669
Lösung 147669 26.02.2021 aktualisiert um 11:57:20 Uhr
Goto Top
Du kannst das
for /f "Delims=" %%a in ('dir /b /ad "%Quelle%"') do (
auch gleich durch ein
for /d %%a in ("%Quelle%\*") do (
ersetzen, dann brauchst du die Quelle später nicht erneut mit angeben, da hier der absolute Pfad schon mit enthalten ist.

Ich würde ja heutzutage gleich die Powershell dafür nehmen
ls 'D:\quelle' -Directory | ? Name -match '^\d+_' | move -Destination {"D:\Ziel\$($_.Name.split('_'))\"} -force -verbose  

Gruß SK
Doskias
Lösung Doskias 26.02.2021 um 12:00:54 Uhr
Goto Top
Macht ja nichts @Squischi. Ich war nur skeptisch, weil die Fragen sich gefühlt wiederholten face-smile
Irgendwie funktioniert der Link zum Ursprungsbeitrag nicht. Da hatte ich schon geschrieben

da sind wir wieder bei der Frage: Wieso Batch und nicht Powershell?
$Basisverzeichnis="c:\temp\"  
> 
> $Zips=Get-ChildItem $basisverzeichnis*.zip
> foreach ($zip in $Zips)
> {
> $zielordner=($zip.name).substring(0,3)
> if(!(test-path $Basisverzeichnis$Zielordner))
> {New-Item -Path $Basisverzeichnis -Name $zielordner -ItemType "directory"}  
> 
> Move-Item $zip $Basisverzeichnis$Zielordner
> }
> 

Ich gehe davon aus, dass wie du schreibst alle Ordner existieren. Wenn nicht wird in dem Skript aus 003 File.zip dann hinterher nur noch 003 (ohne Dateiendung). Ja kann man Abfangen und ja man kann auch Ordner erstellen lassen, falls sie nicht existieren.

Gruß
Doskias

Nachtrag/Änderung: Ordner werden jetzt erstellt, wenn es sie nicht gibt.

Da wurde aber nicht weiter drauf eingegangen face-sad