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:
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
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
6 Kommentare
Neuester Kommentar
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
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
Moin,
Gruß Thomas
Zitat von @Squischi:
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.for /f "Delims=" %%a in ('dir /b /ad "%Quelle%"') do (
move /Y "%%~a" "%Ziel%\%%t\"
...
move /Y "%Quelle%\%%a\*" "%Ziel%\%%t\"
Gruß Thomas

Du kannst das
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
Gruß SK
for /f "Delims=" %%a in ('dir /b /ad "%Quelle%"') do (
auch gleich durch einfor /d %%a in ("%Quelle%\*") do (
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
Macht ja nichts @Squischi. Ich war nur skeptisch, weil die Fragen sich gefühlt wiederholten 
Irgendwie funktioniert der Link zum Ursprungsbeitrag nicht. Da hatte ich schon geschrieben
Da wurde aber nicht weiter drauf eingegangen
Irgendwie funktioniert der Link zum Ursprungsbeitrag nicht. Da hatte ich schon geschrieben
da sind wir wieder bei der Frage: Wieso Batch und nicht Powershell?
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.
$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