sidewinder711
Lieutenant
- Registriert
- März 2007
- Beiträge
- 518
Zum Ordnen von Dateien (welches z.B. Bilder, Dokumente, Audiodateien sein können) in einem Ordner möchte ich eine
Batchdatei erstellen. Diese soll
- den Anfangsnamen von den Dateien auslesen (zB Meisenkönig, Walter-xyz.pdf --> Meisenkönig)
- wenn ein Name mehr als 2x auftaucht,
- dann soll ein Unterordner mit demselben Namen erstellt werden
- und die entsprechenden Dateien sollen in den neu erstellten Unterordner verschoben werden.
Ich habe versucht, mittels DOS-Befehlen und auch in Verbindung mit RegularExpressions eine derartige Batchdatei zu
erstellen, jedoch reichen meine Programmierkünste dazu nicht aus.
-----------------------------------------------------
EDIT. Ich hab' mal ein bisschen im Web gewühlt und folgende Batchdatei gefunden. Allerdings benötige ich eine Änderung dahingehend, dass nicht für jede gefundene Datei ein Ordner erstellt wird, sondern nur, wenn mehrere Dateien denselben Dateianfangsnamen aufweisen.
ZITATBEGINN
...... habe hier viele dateien, die je in einzelne ordner kopiert werden sollten. die ordner sollen die gleichen namen wie die dateien erhalten also je eine datei in einen einzelnen ordner!! kann ich diese vorgehensweise auch mithilfe eines programms oder eines scripts vereinfachen, sodass ich dies nicht alles per hand durchführen muss??
@echo off
rem rekursiver Aufruf? (1.Parameter == /R)
if %1.==/R. goto rekursiv
rem ein Prameter vorhanden?
if %1.==. goto no_params
set src=%1
aram_
rem erster Prameter sollte der Ordner sein, wo's abgeht
if not exist %src%\* goto err_param
rem und nun für jede Datei innerhalb des Quellordners ...
rem dabei ist:
rem '%%i' die "For"-Variable
rem '%0' ist das script selbst
rem 1 '/R' die Markierung für den rekursiven Aufruf
rem 2 '%src%' der Quellordner
rem 3 '%%~fi' Laufwerk+Pfad+Name+Erweiterung der Datei
rem 4 '%%~dpsi' Laufwerk+Pfad+Name+Erweiterung als '8.3'
for %%i in (%src%\*.*) do call %0 /R "%src%" "%%~fi" %%~si
goto end_batch
rem --------------------------------------------------
:rekursiv
rem bin ich's selbst??? Ooops!
if %3.==%0. goto exit_batch
rem check %3 (Datei)
if not exist %3 goto err_R_Datei
rem "falschen" Ordner erstellen ...
if exist %4__\* goto err_R_Dummy
md %4__
rem ... Datei verschieben ...
move %3 %4__ >Nul
rem ... und "falschen" Ordner korrigieren...
move %4__ %3
goto exit_batch
rem --------------------------------------------------
:no_params
echo.
echo. kein Ordner angegeben...
echo. verwende aktuellen Ordner
set src=.
rem ... und Rücksprung
goto param_
rem echo. [Abbruch]
rem echo.
rem goto end_batch
:err_param
echo.
echo. Ordner "%1" scheint nicht zu existieren, kein Zugriff oder nix drin!
echo. [Abbruch]
echo.
goto end_batch
:err_R_Datei
echo. Kein Zugriff auf oder Datei "%3" existiert nicht!
echo. [skip...]
goto exit_batch
:err_R_Dummy
echo. Dummer Zufall...
echo. Dummy-Ordner "%4__" existiert bereits!
echo. [skip...]
goto exit_batch
rem --------------------------------------------------
:end_batch
rem falls noch irgendetwas zu sagen ist...
pause
:exit_batch
ZITATENDE
Batchdatei erstellen. Diese soll
- den Anfangsnamen von den Dateien auslesen (zB Meisenkönig, Walter-xyz.pdf --> Meisenkönig)
- wenn ein Name mehr als 2x auftaucht,
- dann soll ein Unterordner mit demselben Namen erstellt werden
- und die entsprechenden Dateien sollen in den neu erstellten Unterordner verschoben werden.
Ich habe versucht, mittels DOS-Befehlen und auch in Verbindung mit RegularExpressions eine derartige Batchdatei zu
erstellen, jedoch reichen meine Programmierkünste dazu nicht aus.
-----------------------------------------------------
EDIT. Ich hab' mal ein bisschen im Web gewühlt und folgende Batchdatei gefunden. Allerdings benötige ich eine Änderung dahingehend, dass nicht für jede gefundene Datei ein Ordner erstellt wird, sondern nur, wenn mehrere Dateien denselben Dateianfangsnamen aufweisen.
ZITATBEGINN
...... habe hier viele dateien, die je in einzelne ordner kopiert werden sollten. die ordner sollen die gleichen namen wie die dateien erhalten also je eine datei in einen einzelnen ordner!! kann ich diese vorgehensweise auch mithilfe eines programms oder eines scripts vereinfachen, sodass ich dies nicht alles per hand durchführen muss??
@echo off
rem rekursiver Aufruf? (1.Parameter == /R)
if %1.==/R. goto rekursiv
rem ein Prameter vorhanden?
if %1.==. goto no_params
set src=%1
rem erster Prameter sollte der Ordner sein, wo's abgeht
if not exist %src%\* goto err_param
rem und nun für jede Datei innerhalb des Quellordners ...
rem dabei ist:
rem '%%i' die "For"-Variable
rem '%0' ist das script selbst
rem 1 '/R' die Markierung für den rekursiven Aufruf
rem 2 '%src%' der Quellordner
rem 3 '%%~fi' Laufwerk+Pfad+Name+Erweiterung der Datei
rem 4 '%%~dpsi' Laufwerk+Pfad+Name+Erweiterung als '8.3'
for %%i in (%src%\*.*) do call %0 /R "%src%" "%%~fi" %%~si
goto end_batch
rem --------------------------------------------------
:rekursiv
rem bin ich's selbst??? Ooops!
if %3.==%0. goto exit_batch
rem check %3 (Datei)
if not exist %3 goto err_R_Datei
rem "falschen" Ordner erstellen ...
if exist %4__\* goto err_R_Dummy
md %4__
rem ... Datei verschieben ...
move %3 %4__ >Nul
rem ... und "falschen" Ordner korrigieren...
move %4__ %3
goto exit_batch
rem --------------------------------------------------
:no_params
echo.
echo. kein Ordner angegeben...
echo. verwende aktuellen Ordner
set src=.
rem ... und Rücksprung
goto param_
rem echo. [Abbruch]
rem echo.
rem goto end_batch
:err_param
echo.
echo. Ordner "%1" scheint nicht zu existieren, kein Zugriff oder nix drin!
echo. [Abbruch]
echo.
goto end_batch
:err_R_Datei
echo. Kein Zugriff auf oder Datei "%3" existiert nicht!
echo. [skip...]
goto exit_batch
:err_R_Dummy
echo. Dummer Zufall...
echo. Dummy-Ordner "%4__" existiert bereits!
echo. [skip...]
goto exit_batch
rem --------------------------------------------------
:end_batch
rem falls noch irgendetwas zu sagen ist...
pause
:exit_batch
ZITATENDE
Zuletzt bearbeitet: