freckeldfrickler
Goto Top

Umfangreiches Sortieren von Dateien in neue Unterverzeichnisse

Hallo ,
habe folgende Problemstellung:
Ich habe einen Ordner UNSORTIERT, mit ca. 500 Unterordnern, darin gibt es jeweils mehrere hundert Dateien.
Aus diesen Unterordnern sollen bestimmte Dateien (z.B. mit Jürgen Meier im Namen : Jürgen_Wünsche.txt oder Jürgen-Urlaub2001.jpg) in einen Neuen Ordner SORTIERT/Jürgen Meier verschoben werden.
Die Art der zu verschiebenden Dateien stehen in einer Liste (liste.txt)

Hallo ,
habe folgende Problemstellung:
Ich habe einen Ordner UNSORTIERT, mit ca. 500 Unterordnern, darin gibt es jeweils mehrere hundert Dateien.
Aus diesen Unterordnern sollen bestimmte Dateien (z.B. mit Jürgen Meier im Namen : Jürgen_Wünsche.txt oder Jürgen-Urlaub2001.jpg) in einen Neuen Ordner SORTIERT/Jürgen Meier verschoben werden.
Die Art der zu verschiebenden Dateien stehen in einer Liste (liste.txt)
Da der Zielordner nicht immer identisch mit dem Dateinamenbruchstück ist, steht hinter dem Trennzeichen der neu zu erstellende Zielordner.
*
LISTE.TXT :

J.M.=Jürgen Meier
Jürgen=Jürgen Meier
Jutta=Jutta Meier
Jumei=Jutta Meier
Otto
Karl
@=ENTWUERFE

*

Die Namen können sowohl am Anfang als auch in der Mitte des zu findenden Dateinamens stehen (bis auf @, steht immer am Anfang); Otto & Karl soll dabei immer in ein Unterverzeichnis SORTIERT/Otto bzw. /Karl verschoben werden, weil kein gesonderter Zielordner angegeben ist.


Wenn es möglich ist, sollte eine Datei die den gleichen Namen hat, automatisch eine Umbenennung erfahren, eventuell mit (1), (2) etc, oder
mit einem Zeitanhang _JJMMDDHHMMSShh; hier entweder das aktuelle Verschiebedatum oder das Erstelldatum:
Also Unsortiert/VZ1/otto1.jpg --> Sortiert/Otto/otto1.jpg
Unsortiert/VZ3/otto1.jpg --> Sortiert/Otto/otto1(1).jpg oder Sortiert/Otto/1_12093017521323.jpg
Unsortiert/VZ13/otto1.jpg --> Sortiert/Otto/otto1(2).jpg oder Sortiert/Otto/otto1_12093017540401.jpg
Unsortiert/VZ129/otto1.jpg --> Sortiert/Otto/otto1(3).jpg oder Sortiert/Otto/otto1_12093017540698.jpg
Es kommt darauf an, dass keine Datei durch Überschreiben verloren geht.

Mein erster Versuch sieht so aus:

@echo off & setlocal
FOR /f "usebackq delims==" %%a IN (liste.txt) DO (  
if not exist c:\versuch\tmp\%%a mkdir c:\versuch\tmp\%%a
echo findet alle Dateien mit Namen %%a am Anfang:
dir /s/b %%a*.* > tmp.txt
rem findet alle Dateien mit Namen %%a in der Mitte:
dir /s/b *%%a*.* >> tmp.txt
FOR /f "usebackq delims==" %%b IN (tmp.txt) DO copy /-Y "%%b" c:\versuch\tmp\%%a  
echo "FOR /f "usebackq delims==" %%b IN (test.txt) DO copy /-Y "%%b" c:\versuch\tmp\%%b"  
)

Das KOPIEREN scheint zu funktionieren.

Noch etwas Wichtiges: Die Dateien sollen im ERNSTFALL nicht kopiert, wie im Skript momentan vorhanden, sondern bewegt (move) werden, das COPY steht nur im Moment der Testphase dort. Dies führt aber höchstwahrscheinlich noch zu weiteren Problemen, da beim MOVE auch die Verzeichnisnamen, die den Suchstring enthalten, sofort wegbewegt werden, samt Dateien, die gar nicht der Suchmaske entsprechen.

Allerdings arbeitet mein Skript bisher nur mit einer e i n f a c h e n Liste, und nicht mit der oben stehenden, gewünschten:


Liste(vorläufig).txt:

J.M.
Jürgen
Jutta
Jumei
Otto
Karl


D.h es wird immer ein neues VZ erstellt, wie die Namensbruchstücke gelistet sind, was ich aber so nicht will (J.M. sollte ja in ein VZ "Jürgen Meier" kopiert werden.

Wie bewerkstellige ich, daß ich mit "Liste.txt" arbeiten kann.
Ein noch groesseres Problem ist und bleibt aber das Problem des nicht Überschreibens! Und da habe ich noch nicht einmal die blasseste Ahnung, wie das gelöst werden könnte.
Es gibt einen Beitrag von BASTLA unter Gleichnamige Dateien in verschiedenen Ordnern, in einen Ordner kopieren und umbennen mit einem Lösungsansatz:

for /F "tokens=1* delims=:" %%i in ('findstr /n "^" test.bak')  
do for /f "tokens=1* delims=:" %%x in ('findstr /n "^"   
namen.bak^|findstr /b "%%i:"')   
do echo copy "%%j" "C:\test\%%y.jpg"  


Doch wie binde ich das ein? Als absoluter Gelegenheitsbatchschreiber bin ich von all den Tokens and Delims dermaßen verwirrt, dass ich, wenn überhaupt,Tage bis Wochen bräuchte, um dass alles zusammen zu frickeln. Darum bitte ich die Profis unter Euch, mir mal ein wenig zu helfen.


Ich hoffe, mein Problem verständlich dargestellt zu haben und freue mich über jeden Hinweis


FF

Content-Key: 192109

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

Ausgedruckt am: 28.03.2024 um 20:03 Uhr

Mitglied: pieh-ejdsch
pieh-ejdsch 02.10.2012 aktualisiert um 15:55:32 Uhr
Goto Top
moin freckeldfrickler,

wie genau ist denn der Dateiname aufgebaut?
mit Unterstrich bzw Mittestrich als Trenner vom Namen zu den Daten
Namensteil_Datenteil.txt
N.T.-Datenteil.jpg
Gibt es dann auch keinen weiteren Unterstrich bzw. Mittstrich im Dateinamen?

Kannst Du beim Erstellungsdatum sicherstellen, dass die Dateien immer ein anderes Erstellungsdatum haben?

Setz bitte den Code nicht in Fettschrifft sondern in Codeblöcke.
wie es geht steht in diesem Abschnitt: Verfassen

Gruß Phil
Mitglied: freckeldfrickler
freckeldfrickler 02.10.2012 aktualisiert um 17:29:51 Uhr
Goto Top
Hallo Phil,

so ich hoffe, jetzt stimmt es mit den Codeblöcken.

Zu den Dateinamen:
Es gibt kein verallgemeinerungsfähiges Muster.
Es handelt sich hierbei um Dateien von Schülern, die mal dazu aufgefordert wurden, eine Systematik in Ihre Dateinamen zu bringen.Was nur mehr oder meist weniger gut funktioniert.

Jutta hatte hatte mal die Dateienunter 'Jutta......doc' oder unter '......Jutta.pdf' oder 'Jumei_.......txt' sogar unter Foto_Klassenfahrt_Jutta_Mai2010.jpg oder Foto_Klassenfahrt_Jumei_Mai2010.tif abgespeichert.

Jürgen hingegen benutzt zeitweise 'Jürgen.....' oder 'J.M.......'
oder J.M.foto_Mai2010_Klassenfahrt22.jpg oder foto17Mai2010Klassenfahrt(JM).bmp (ganze ohne Striche!).
Das Skript soll als Filter werkeln: Dafür die schnell zu bearbeitende LISTE.txt. Man kann ganz schnell z.B. "Klassenfahrt" als abzuarbeitenden Begriff eintippen oder auch pippo=Jürgen Meier hinzufügen, falls es sich herausstellt, dass Jürgen nun sich ein anderes Kürzel angewöhnt hat.Oder Ich kann durch Otto=Klasse12c und Jutta=Klasse12c einen bestimmten neuen Speicherort zuweisen, und so zum Beispiel den ganzen produzierten Mist der Klasse 12c sammeln und vereinen. Im nächsten Jahr wir dann geändert: Jutta=13c , Otto=12c weil er das Klassenziel nicht erreicht hatte. Für das Problem des in jedem 2. Verzeichnis auftretenden dok1.doc nehme ich dann eben dok1=unbenannte_Dokumente in meine Liste auf, hier wird die geforderte Durchnummerierung der Dateien offensichtlich.

Noch etwas Wichtiges: Die Dateien sollen im "ERNSTFALL" nicht kopiert, wie im Skript momentan vorhanden, sondern bewegt (move) werden, das "copy" steht nur im Moment der Testphase dort. Dies führt aber höchstwahrscheinlich noch zu weiteren Problemen, da beim "move" auch die Verzeichnisnamen , die den Suchstring enthalten, sofort wegbewegt werden, samt Dateien, die gar nicht der Suchmaske entsprechen.
Ich habe dafür zwar hilfsweise eine manuelle Lösung parat, (z.B. alle Verzeichnisnamen in Namen mit laufende Nummern umbenennen), vielleicht lässt sich aber von vorneherein dieses Problem irgendwie umgehen.

Zu den Datumswerten: Ich gehe mal davon aus, dass zwei Dateien mit gleichen Namen und und gleichem Erstellungsdatum HIER in diesem Falle als identisch zu betrachten sind und dann auch ruhig überschrieben werden können, falls sich die Überprüfung
a u c h auf die Uhrzeit bezieht.
Anders der Fall, wenn die Datei VZ2/10.jpg und die Datei VZ9/10.jpg
nicht den gleichen Datumsstempel haben, dann sind sie offensichtlich wohl nicht gleich und eine Datei davon muss mit einer laufenden Nr. oder sonstwas umbenannt werden.
Ich hoffe, ich liege mit dieser Annahme richtig.
Mitglied: 60730
60730 02.10.2012 aktualisiert um 17:49:07 Uhr
Goto Top
moinsen,

mal was ganz anderes....

  • ist das ein Windows Server, auf dem die Daten liegen?
  • Vielleicht sogar ein NTFS Volume?
  • Und die Schüler sind "zufälligerweise" in der AD angelegt?

Wenn 3* Ja, dann ist das ganz "einfach"....

Dir /a-d /q

Gruß
Mitglied: freckeldfrickler
freckeldfrickler 02.10.2012 um 19:02:00 Uhr
Goto Top
Hallo LimboSeil,
3 x nein, leider nicht.
Ist ein popeliger Windows XP -Rechner und die Daten liegen auf einem FAT32 Volumen, um locker von Linux aus darauf zugreifen zu können.
Gruss FF
Mitglied: pieh-ejdsch
pieh-ejdsch 03.10.2012 aktualisiert um 11:58:01 Uhr
Goto Top
moin,

Irgendwie müssen die Daten ja auf das Volume drauf gekommen sein.
Da könnte von dem Ursprungort mit NTFS auch der Besitzer gefiltert werden. So wie von LimboSeil der Gedanke.
>for /f "tokens=2delims=\:" %i in (' cacls Dateiname ^|find /i " %computername%"  '
 ) do @echo Benuzter=%i

Aber für so ein Durcheinander von Mustern, ist es schon etwas schwierig eine komplette Automatik zu basteln.
Ist in den einzelnen Unterordnern (VZ1 VZ2 etc. ...) von allen Schüler immer nur eine Datei bzw ein Satz von Daten drin, sprich die komplette Klasse wurde in einem Unterordner für ein Projekt eingesammelt?
Oder gibt es mehrere Projekte eines Schülers in einem Ordner?

Wie soll sonst ein SchülerNamensbestandteil einer Datei von einem ProjektNamen unterschieden werden?

Eine grobe Vorsortierung mit einem Batch würde zwar gehen, aber es müsste immer alles Kontrolliert werden.

Für so einen Fall habe ich eine Batch, welche mir erst die Ordnerstruktur und Mögliche Kopier- /Verschiebeaktionen je Zeile auflistet.
Bei seperaten Ordnern auch Namen.
Diese Liste schaue ich mir an und kann danach den Batch verfeinern.
Ist die Liste von mir abgesegnet, greift erst dann Teil zwei des Batches mit den Verschieben.

Gruß Phil
Mitglied: freckeldfrickler
freckeldfrickler 03.10.2012 um 14:49:07 Uhr
Goto Top
Hallo Phil,

ja irgendwie, manchmal auch über eine Linux-Live-CD. Das Problem über die Benutzerrechte zu lösen halte ich für keine gute Idee, weil FAT eben keine Benutzerrechte kennt.
Aber ich glaube, das alles etwas weniger kopliziert ist, als es sich anhört (liest).
Ich will mal Versuchen, alles nach und nach aufzubauen. Dabei denke ich mir folgenden Fahrplan:
1. Auslesen aus Liste (z.B. J.M.=Juergen Meier , funktioniert)
2. Aufsplitten in Quelle und Ziel ( funktioniert prinzipiell, ausser das ich den Wert aus 1 nicht in die 2. for-Schleife bekomme)
3. Einfügen von Quelle und Ziel in die Kopier- bzw Move-Funktion (müsste ich doch wohl schaffen)
4. Einbringen eines Überschreibschutzes nach dem Muster von BASTLA, mal sehn, soweit bin ich ja noch nicht)
c'est ca!
Da ich aber Gelegenheitsschreiber von cmds bin, benötige ich sicher noch den einen oder anderen Tip von Dir oder anderen Experten, weil meine syntaktischen Kenntnisse insbesonder bei For, delims, tokens und Variablenübergabe etc. sehr mangelhaft sind. Manchmal fehlt halt ein % oder ' oder " und nichts geht mehr.

So, ich poste mal hier meinen Versuch von gesamten gestrigen Abend:
echo off & setlocal

rem nächste Zeile liest aus Liste z.B. J.M.@JürgenMeier
FOR /f "usebackq delims==" %%a IN (liste.txt) DO SET STRING=%%a & (  
rem ......%%a in %STRING% setzen funktioniert nicht:
echo TEST: STRING IST %STRING%
rem ???????????????????????????????????????????????????????????????????????
rem Wie bekomme ich den Inhalt von %%a in die nächste FOR- Zeile?
rem nächste FOR-Zeile sollte %aa (J.M.@JürgenMeier) aufsplitten, was auch prinzipiel
rem funktioniert (ausser dass der Wert von %%a oder %String% nicht übernommen wird.
FOR /F "tokens=1,2 delims=@" %%G IN (%STRING%) DO set Quelle=%%G & set Ziel=%%H  
echo TEST: Quelle ist %Quelle%, Ziel ist %Ziel%
rem weiter bin nach langem probieren noch nicht gekommen. . . .
rem ----------------------------------------------------------------------
pause
rem Hier muss ich dann noch umbauen, dass %Quelle% und %Ziel% verarbeitet wird...
if not exist c:\versuch\tmp\%%a mkdir c:\versuch\tmp\%%a
echo findet alle Dateien mit Namen %%a
dir /s/b %%a*.* > test.txt
rem findet alle Dateien mit Namen %%a:
dir /s/b *%%a*.* >> test.txt
FOR /f "usebackq delims==" %%b IN (test.txt) DO copy /-Y "%%b"  
rem Irgendwo hier oder eine Zeile höher müsste dann die Frage nach vorhandenen Dateien und der Umbenenung erfolgen
c:\versuch\tmp\%%a
echo "FOR /f "usebackq delims==" %%b IN (test.txt) DO copy /-Y "%%b" c:\versuch\tmp\%%b"  
)


Wer kann mir Hilfestellung bei den ??????????????????????? geben?

Grüsse
FF
Mitglied: freckeldfrickler
freckeldfrickler 03.10.2012 um 19:00:23 Uhr
Goto Top
Zu meinem vorhergehenden Kommentar habe ich folgenden Zusatz.

Ich habe ein wenige gebastelt um das Problem mit der Variablen zu lösen.

Dazu habe ich die Ausgabe des ersten FOR in eine Datei tmp.tmp umgeleitet.

In den Quelltext vom vorhergehenden Beitrag habe ich dann vor Zeile 12 mittels

for /F "delims=" %%z in (tmp.tmp) do if not defined zeile set "ZEILE=%%z"  

versucht, tmp.tmp auszulesen und den Wert dann in %Zeile% zu speichern.
Der Wert wurde aber diesmal auch nicht übernommen (wie bei meiner ersten for-Konstruktion) und ein echo von %Zeile% bleibt auch hierbei leer.

Setze ich die Zeile alleine in eine neue cmd , dann funktioniert alles tadellos: Die Zeile wird ausgelesen und die Variable %Zeile% wird auch als Echo wiedergegeben.


Was läuft hier wohl falsch? Warum kann man nach dem ersten For ein zweites nicht mehr normal benutzen?
Mitglied: pieh-ejdsch
pieh-ejdsch 07.10.2012 aktualisiert um 14:04:46 Uhr
Goto Top
Eine Variable innerhalb einer Klammer muss mit delayedexpansion aufgelöst werden.
Dies ist aber nicht nötig, wenn Du die Variable so wie Du sie Benötigst Nicht veränderst, denn sie ist ja schon in der For-Variable %%a enthalten.
Es gibt hier auch einige gute Tutorials im Batch Bereich.

Für den Anfang kannst Du das Ganze so lösen:
;testnamen.txt
;Zeilen mit Semikolon sind Kommentarzeilen
J.M.=Jürgen Meier
Jürgen=Jürgen Meier
Jutta=Jutta Meier
Jumei=Jutta Meier
Otto
Karl
;wenn Entwürfe zuerst behandelt werden also vorher
;kann nach Priorität erst diese Markierung verschoben werden  
@=ENTWUERFE

@echo off
setlocal

 :: echo on

set "Quelle=D:\adtest\alt"  
set "Ziel=D:\adtest\neu"  
set "Namen=D:\adtest\testnamen.txt"  


set "TempN=%temp%\Namenliste850.txt"  
 rem Liste mit Umlauten cmd tauglich umschreiben
chcp 1252 >nul
3>"%TempN%" (  
for /f "usebackqtokens=1*delims==" %%a in ("%namen%") do for /f "tokens=2delims=:" %%b in ("%%a:%%b:%%a") do chcp 850 >nul &>&3 cmd /c "echo %%a:%%b:"&chcp 1252 >nul  
)
chcp 850 >nul

 rem Dursuche Verzeichnis mit Liste
for /f "usebackqtokens=1,2delims=:" %%a in ("%tempN%") do (  
   rem BenutzerName länge bestimmen
  set "BName=%%a"  
  for /f %%c in ('cmd /u /von /c "echo !BName!"^|more^|findstr .^|find /c /v "" ') do set /a LN=%%c , LkN=ln-1  
  set "BPfad=%%b"  
  for /r "%quelle%" %%i in ("*%%a*" ) do (  
    if not exist "%ziel%\%%b\" md "%ziel%\%%b"  
    set "FName=%%~dpi"  
    set "Datei=%%~ni"  
    set "DNameNeu=%%~ni"  
    call :Namecheck %%~xi
) )

exit /b

:Namecheck
setlocal enabledelayedexpansion
for /f "delims=" %%i in ("!datei:%Bname%=!" ) do endlocal & set "DNameNeu=%%~i"  
if "%Datei%" neq "%Dnameneu%" set "DNameNeu=[%BPfad%]%Dnameneu%" &goto :findDouble  

:Nameset
 rem wenn Name nicht Case sensitiv gefunden!
 rem zeige Offsets vom 1.des Benutzernamens im Dateiname zum Vergleichen
for /f "delims=" %%I in (' cmd /u /von /c "echo !datei:~0^,-%lkn%!"^|find /i /n "%Datei:~0,1%" ') do (  
  echo %%I 
  set /a V =%%I -1 ,H =V +LN
  setlocal enabledelayedexpansion
  for /f "tokens=1-2" %%J in ("!V! !H!") do (  
    echo %%J
    if /i !Datei:~%%J^,%LN%! equ !BName! if !Datei! equ !DnameNeu! for /f "delims=" %%J in ("[!BPfad!]!Datei:~0,%%J!!Datei:~%%K!") do endlocal &set "DnameNeu=%%J"  
  )
)

:findDouble
set "Timestamp="  
 rem Bei Timestamp anpassen mit :: goto
goto :NoTimestamp

 rem Timestamp mit Sekunden liefert Robocopy
for /f "tokens=1-7* delims=/:	 " %%S in (' 2^>nul robocopy /L /ts /fp /bytes /np /nc /ndl /njh /njs "%FName:~0,-1%" "D:\irgendetwasesnochnichtgibt" "%Datei%%1"') do set "Timestamp= [%%T%%U%%V%%W%%X%%Y]" &rem Groesse=%%S ,"Name=%%Z"   
:NoTimestamp

 rem wenn doubletten als extra Datei verschoben werden sollen
set "double="  
:: goto :nodouble 

(for /f %%A in (' ^( echo(. ^&2^>nul dir /b "%ziel%\%BPfad%\%DnameNeu%%Timestamp%%1" "%ziel%\%BPfad%\%DnameNeu%%Timestamp% (*)%1" ^) ^|find /c /v "" ^|findstr /vx "0 1" ') do set "double= (%%A)" ) || set "double="  

:nodouble
@echo move "%FName%%Datei%%1" "%ziel%\%BPfad%\%DnameNeu%%Timestamp%%double%%1"   
:: move "%FName%%Datei%%1" "%ziel%\%BPfad%\%DnameNeu%%Timestamp%%double%%1"  

exit /b

Gruß Phil
Mitglied: freckeldfrickler
freckeldfrickler 20.03.2013 um 14:53:50 Uhr
Goto Top
Hallo Phil,

etwas spät - aber ich hoffe nicht zu spät. Nachdem für mein Problem erst mal kein weiter Vorschlag im Forum kam, habe ich es auch nicht mehr besucht. Um so grösser die Freude, dass doch noch ein umfassende Lösung von Dir gekommen ist, aber dazu später.
Ich selbst habe für mich in der Zwischenzeit mir eine Lösung zusammengekrückt, mit der ich arbeiten kann.
Weil es aufgrund der vielen verschachtelten for-Schleifen ständig zu für mich nicht auflösbaren Fehlermeldungen und unerwarteten Ergebnissen kam,habe ich folgendes gemacht.
Ein "generiere-das-verschiebe-cmd.cmd" erzeugt mir ein "verschiebe.cmd", dazu liest es aus meiner Liste ( KM-#Meier, klaus#Meier , -km#Meier, Conny#C_Meier etc.) die einzelnen Zeile nach und nach aus und schreibt für
jede Listenzeile diese 4 Zeile in die "Verschiebe.cmd".
echo ************ bearbeite meier ***************  
if not exist q:\themes\meier\nul mkdir q:\themes\meier 
dir /s/b KM-.*.* >> test.txt 
FOR /f "usebackq delims==" %%a IN (test.txt) DO move /-Y "%%a" q:\themes\meier  

Alsofür jeden Eintrag in der Liste ein neuer Vierzeiler . . .

Das ergibt dann eine ganz schön lange "verschiebe.cmd" für um die hundert Einträge in der Liste, diese wird dann als Spagetticode abgearbeitet. Aber es funktioniert.

Ein Wermutstropfen. Da es mir nicht gelungen ist, ">>" und "%%a" in die verschiebe.cmd zu echoen, verwende ich nun ++ statt >> beim generieren. Danach muss ich manuell mit einem Editor alle ++ durch >> und alle %a durch %%a ersetzen. Danach läuft aber die verschiebe.cmd und erspart mir einige Stunden manuellen Sortierens.
Einiges ist bei dieser Lsg. natürlich auf der Strecke geblieben, insbesondere die Abfrage nach doppelten Dateien. Ich habe viel mit einem Counter an unterschiedlichen Stellen experimentiert, aber die mehrfach verschachtelten for-Schleifen ließen ihn niemals so laufen , wie ich es geplant hatte. Auch bereitete mir das eine oder andere Sonderzeichen im Dateinamen Probleme.

Jetzt bereite ich die zu verschiebenden Dateien mit einem batch-renamer gründlich vor, entferne damit Leer- und Sonderzeichen und hänge einen Counter (00001, 00002 usw.) an die Dateinamen an, somit macht es nichts aus, dass
meine Spagetti-verschiebe.cmd keine schon vorhandenen Dateien berücksichtig, der Fall kommt ja nicht (mehr) vor. Ist wahrscheinlich für einen PC-Spezialisten eine ärmliche Lösung, aber für einen Praktiker ist die ärmliche Lösung besser als keine Lösung.

So, nun zu dem neuen Vorschlag von Dir. Wie ich sehe, hast Du echt viel Zeit & Mühe darin investiert. Die batchscheint ja alles zu berücksichtigen. Wenn ich sie so überfliege, fällt mir auf, dass allein das Aufrufen und Beenden von setlocal, enable ... von mir schon nicht hätte geleistet werden können.


Obwohl ich dazu (d?)einen Spezialbeitrag in diesem Forum gelesen hatte, der mir aber nicht weitergeholfen hat. Dazu muss man schon mehr Feeling im Kopf für batch-Dateien haben, um das alles zu verstehen und vor allem auch RICHTIG anwenden zu können.
"rem Liste mit Umlauten cmd tauglich umschreiben" darauf wäre ich nie gekommen! Da muss man schon Programmierer mit Leib und Seele sein. Kompliment.

Sobald ich etwas Zeit habe, werde ich das Script mal durchlaufen lassen, ich kann mir nicht vorstellen, dass Du es ungetestet hier eingestellt hast.
Nochmals, recht herzlichen Dank für Deine Mühen,

FF, (besser spät als nie!)