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-Key: 656554

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

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

Member: Doskias
Doskias Feb 26, 2021 updated at 10:21:04 (UTC)
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
Member: Squischi
Squischi Feb 26, 2021 updated at 10:23:59 (UTC)
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...
Member: TK1987
Solution TK1987 Feb 26, 2021 updated at 10:28:32 (UTC)
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
Member: Squischi
Squischi Feb 26, 2021 at 10:32:29 (UTC)
Goto Top
Ahh vielen Dank!
Daran habe ich nicht gedacht!

Beste Grüße
Mitglied: 147669
Solution 147669 Feb 26, 2021 updated at 10:57:20 (UTC)
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
Member: Doskias
Solution Doskias Feb 26, 2021 at 11:00:54 (UTC)
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