lakslo

Verschiedene Dateien aus Unterordner mit Umbenennung verschieben

Hallo Batch-Profis,

ich habe eine Anforderung auf dem Tisch liegen die ich schlichtweg nicht schaffe und bräuchte Eure Hilfe. Es gibt verschiedene PDF Dateien in verschiedenen Unterordner die alle in einen Ausgabe Ordner incl. Datum verschoben werden sollten. Das Problem dabei ist das in den Ordnernamen Informationen stecken die sich dann im Filenamen bzw. in den Outputordnern widerspiegeln sollten.

Ein Beispiel:
Dateien/Ordnerstruktur:
D:\Programme\Ausgabe\Batch10#\M01J12\ABC\SECU.pdf
D:\Programme\Ausgabe\Batch09#\M01J12\ABC\A100\SECU.pdf
D:\Programme\Ausgabe\Batch07#\M01J12\DEF\ASF.pdf
D:\Programme\Ausgabe\Batch07#\M12J11\XYZ\BRA\ASF.pdf
D:\Programme\Ausgabe\Batch03#\M12J11\XYZ\ASF.pdf

- Unterordner BatchXY# - hier verändern sich die Zahlen – prinzipiell sind Zahlen von Batch01# bis Batch25# möglich.
- M01J12 steht für Monat 01 (Januar) und Jahr 2012 … diese Information ist wichtig und sollte dementsprechend geordnet werden.
- ABC/DEF/XYZ: Kennzeichnung der Abteilung – hier kann „alles“ vorkommen
- A100/BRA: Kennzeichnung der Unterabteilung (nicht überall vorhanden) - hier kann „alles“ vorkommen
- *.pdf – PDF Dateien mit unterschiedlichen Namen je nach darin enthaltene Auswertung

--> Ausgabe sollte folgendermaßen erfolgen – der Monats/Jahr Ordner sollte erstellt werden.

D:\Programme\SORTIERUNG\M01J12\SECU_ABC.PDF
D:\Programme\SORTIERUNG\M01J12\SECU_ABC_A100.pdf
D:\Programme\SORTIERUNG\M01J12\ASF_DEF.pdf
D:\Programme\SORTIERUNG\M12J11\ASF_XYZ_BRA.pdf
D:\Programme\SORTIERUNG\M12J11\ASF_XYZ.pdf

Die Dateien sollten verschoben werden und am alten Platz nicht mehr vorhanden sein.
Hat hier wer eine Idee für ein Batchscript?

Danke vorab für Eure Hilfe,
Lakslo
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 178068

Url: https://administrator.de/forum/verschiedene-dateien-aus-unterordner-mit-umbenennung-verschieben-178068.html

Ausgedruckt am: 11.05.2025 um 04:05 Uhr

pieh-ejdsch
pieh-ejdsch 23.12.2011 um 17:01:56 Uhr
Goto Top
moin Lakslo,

insofern unter dem Ordner Ausgabe nur diese PDF dateien sind könnte es so gehen.
@echo off &setlocal

set /a Deep = 5
set "Quelle=D:\Programme\Ausgabe\*.pdf"  
set "Ziel=D:\Programme\SORTIERUNG\"  

for /f "delims=" %%i in ('dir /s /b "%Quelle%" ') do for /f "tokens=%Deep%* delims=\" %%a in ("%%~dpi") do if "%%b" neq "" (set "Bname=\%%b"  
	setlocal enabledelayedexpansion
	set "Bname=!Bname:\=_!"  
	set "Bname=!Bname:~,-1!"  
	@echo if not exist "%Ziel%%%a" md "%Ziel%%%a"  
	@echo move "%%i" "%Ziel%%%a\%%~ni!Bname!%%~xi"  
	endlocal
)
pause

Wenn Du die @echo entfernst ist der Batch scharf. Sonst zeigt er nur an.

Gruß Phil
Lakslo
Lakslo 25.12.2011 um 16:38:11 Uhr
Goto Top
Hallo Phil,

erstmals vielen Dank für Deine Hilfe.
Das Script schaut schon sehr gut aus - vielleicht kannst Du mir auch die letzten Anpassungen noch erklären.

Der Ordner der mit dem Script erstellt wird (dort wo reinkopiert wird) nimmt für den Namen eine Ebene zu früh. Also derzeit heißt er dann z.B. Batch03# - er sollte aber M12J11 heißen.
Beim Dateinamen wird dann genau dieses Datum mitgenommen in den Filenamen (was raus sollte) - der Rest ist bereits super! Diese BatchXY# Bezeichnung sollte daher weder beim erstellenten Ordner noch im File auftauchen.

Kann man auch irgendwie sicherstellen das nur in den BatchXY# Verzeichnissen gesucht wird und nicht im ganzen Root-Ordner (die Variable "Quelle" im Script).

LG und nochmals vielen Dank!
Lakslo
Lakslo
Lakslo 25.12.2011 um 16:49:20 Uhr
Goto Top
Hallo Phil,

doch noch gecheckt - brauche nur die Deep Variable anpassen dann klappt das auch mit dem Verschieben. Habe da für die Tests etwas mit der Ordnerstruktur gemacht sonst hätte es gleich gepasst.

Jetzt ist also nur noch die Frage mit der Suche offen - Bsp:
D:\Programme\Ausgabe\Batch10#\M01J12\ABC\SECU.pdf
D:\Programme\Ausgabe\Batch05\M01J12\ABC\SECU.pdf

Das Script sollte nur in den # Ordnern suchen und nicht in anderen ...
Hast Du da noch was?

LG
Lakslo
pieh-ejdsch
pieh-ejdsch 25.12.2011 um 18:32:42 Uhr
Goto Top
moin Lakslo,

eine Ebene zu Früh? Hhmmm. Laut Anforderung ist doch (wenn Root Ebene 1) Ebene 5 der Zielname - ach seh grad hast noch gebastelt...
das Filterst Du mit einer zusätzlichen Suchzeichenfolge mit Findstr heraus.

@echo off &setlocal

set /a Deep = 5
set "Quelle=D:\Programme\Ausgabe\*.pdf"  
set "Ziel=D:\Programme\SORTIERUNG\"  

set Filter= /r /c:"[\\]Batch[\ ]*[1-2][0-9]#[\\]M[0-9][0-9]J[0-9][0-9]"  
:: Filter nach regulärem Ausdruck Hilfe unter Findstr /?

for /f "delims=" %%i in ('dir /s /b "%Quelle%" ^|findstr %Filter% ') do for /f "tokens=%Deep%* delims=\" %%a in ("%%~dpi") do if "%%b" neq "" (set "Bname=\%%b"  
	setlocal enabledelayedexpansion
	set "Bname=!Bname:\=_!"  
	set "Bname=!Bname:~,-1!"  
	@echo if not exist "%Ziel%%%a" md "%Ziel%%%a"  
	@echo move "%%i" "%Ziel%%%a\%%~ni!Bname!%%~xi"  
	endlocal
)
pause

<code type plain>findstr /r /c:"\<Batch[\ ]*[0-9]*#\>"
würde rein TheoreTisch ausreichen, aber so wie oben ist bissel sicherer
Du könntest auch noch eine For /d-schleife davorschachteln aber das geht schon so

Gruß Phil
Lakslo
Lakslo 26.12.2011 um 17:09:48 Uhr
Goto Top
Hallo Phil,

ja das hat geholfen.
Vielen Dank - Du hast mir hier sicher Stunden über Stunden an Recherchen erspart.

LG
Lakslo