dertii
Goto Top

2 Zeilen einer mit Operator beginnenden XML-Datei auslesen und überschreiben

Hallo allerseits,

die Threads hier im Forum haben meine dürftigen Stapelverabeitungskenntnisse bereits ein ums andere Mal ausgezeichnet kompensiert. An dieser Stelle ein Dankschön an bastla, biber und miniversum. Allerdings stoße ich trotz einiger ähnlicher Problemstellungen in andernen Forenbeiträgen mit dem folgenden Problem nun wirklich an meine Grenzen.

Vorab die Info, dass es sich bei meinem Problem nur um einen Auszug meiner batch-Datei handelt. Ich möchte das folgende Teil-Problem unbedingt auch in der Batch lösen und extern allenfalls mithilfe von "call" ein vbs-script aufrufen müssen.

Der Prozess den ich Automatisieren will, nutzt eine XML-Datei als Input-file (d.h. 1 Prozessschritt = Programmaufruf + Prozessierung einer Datei mit bestimmten I/O-Parametern) In der XML-Datei sind in den Zeilen 8 und 9 die Input- und Output-pfade für je 1 Prozessschritt verankert. Um mehrere Datein nacheinander zu prozessieren müsste die XML-Datein in einer Schleife editiert werden. Dabei sollen in jedem Schleifendurchlauf die I/O-Parameter (aus einem anderen Teil der batch) übergeben und in die entsprechenden Zeilen geschrieben werden. Diese beiden Zeilen sehen folgendermaßen aus:

        <InputProduct file="Das_ist_die_input_file.N1" /> 
        <OutputProduct file="Das_ist_die_output_file.dim" format="BEAM-DIMAP" /> 

Ein großes Problem stellt für mich der Umgang mit den "<,>"-Operatoren am Zeilenanfang und -ende dar.
Da ich mich mit XMLs in keinster Weise auskenne, gehe ich davon aus, dass die Einrückweite am Zeilenanfang syntaktisch wichtig ist und die Leerzeichen beim überschreiben erhalten bleiben müssen.

Schon mal im Voraus vielen Dank für's Kopfzerbrechen.

Beste Grüße,
Dertii

Content-Key: 115761

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

Ausgedruckt am: 28.03.2024 um 19:03 Uhr

Mitglied: miniversum
miniversum 11.05.2009 um 13:23:00 Uhr
Goto Top
Hallo
Da es sich ja immer um die gleiche XML Datei handelt und du auch die Zeilen genau kennst und es auch immer die Zeilen 8 und 9 sind die du editieren willst könntest du das Problem auch anders lösen. Statt diese beiden Zeilen zu editieren könntest du sie, in eine temponäte Datei, neu schreiben und die restlichen Zeilen aus der Orginaldatei dazupacken. Später kannst du die temponäre Datei dann wieder löschen. Vielleicht wäre das ja eine alternative für dich.
Das ganze würde dan so aussehen:
set "XMLfile=org.xml"  
set "tempXMLFile=temp_%XMLfile%"  
set "space=        "  
set "infile=Das_ist_die_input_file.N1"  
set "outfile=Das_ist_die_output_file.dim"  

echo XML Zeile1>"%tempXMLFile%"  
echo XML Zeile2>>"%tempXMLFile%"  
echo XML Zeile3>>"%tempXMLFile%"  
echo XML Zeile4>>"%tempXMLFile%"  
echo XML Zeile5>>"%tempXMLFile%"  
echo XML Zeile6>>"%tempXMLFile%"  
echo XML Zeile7>>"%tempXMLFile%"  
echo %space%^<InputProduct file="%infile%" /^>>>"%tempXMLFile%"  
echo %space%^<OutputProduct file="%outfile%" format="BEAM-DIMAP" /^>>>"%tempXMLFile%"  
more +9 "%XMLfile%">>"%tempXMLFile%"  
...
tu was mit der temponären xml Datei
...
del "%tempXMLFile%"  
Mitglied: bastla
bastla 11.05.2009 um 15:53:19 Uhr
Goto Top
Hallo Dertii und willkommen als Mitglied!

Da ich mich irgendwie angesprochen fühle face-wink (und Du VBS explizit nicht ausgeschlossen hast), ein Ansatz mit einem (vom Batch erzeugtem) VB-Script:
@echo off & setlocal
set "XMLFile=D:\Datei.xml"  

set M=%temp%\ModifyPath.vbs
>%M%  echo Set fso=CreateObject("Scripting.FileSystemObject"):T=Split(fso.OpenTextFile("%XMLFile%").ReadAll,vbCrLF)  
>>%M% echo T(7)="        <InputProduct file=""" ^& WScript.Arguments(0) ^& """ />"  
>>%M% echo T(8)="        <OutputProduct file=""" ^& WScript.Arguments(1) ^& """ format=""BEAM-DIMAP"" />"  
>>%M% echo fso.CreateTextFile("%XMLFile%",True).Write Join(T,vbCrLF)  

::Demo mehrfacher Aufruf
cscript //nologo %M% "Das_ist_die_input_file.N1" "Das_ist_die_output_file.dim"  
type "%XMLFile%"  
echo\
cscript //nologo %M% "ein_anderes_rein.N1" "und_wieder_raus.dim"  
type "%XMLFile%"  
Auch dieser Ansatz geht davon aus, dass die hinsichtlich des Aufbaues bekannten Zeilen 8 und 9 einfach neu geschrieben werden können.

Zum Script: Nach dem Einlesen stehen die einzelnen Zeilen im (nullbasierten - daher wird Zeile 8 mit Index 7 angesprochen) Array "T". Darin werden die beiden relevanten Zeilen durch aus den konstanten Teilen und den als Parametern übergebenen "In"- und "Out"-Files kombinierte neue Zeilen ersetzt. Danach überschreibt das Script die gesamte XML-Datei mit den neuen (bzw großteils alten) Zeilen. Anzumerken wäre noch, dass Anführungszeichen, welche als solche (und nicht als Textbegrenzung) verwendet werden sollen, in VBS verdoppelt werden müssen.

Grüße
bastla
Mitglied: Dertii
Dertii 12.05.2009 um 09:24:26 Uhr
Goto Top
Hallo ihr beiden,

Danke für die schnellen Antworten.

@ Miniversum: Sehr pragmatisch. Darauf die XML vollständig zu emulieren, hätte eigentlich selbst kommen müssen, aber dabei fehlt es mir schlichtweg an Programmiererfahrung.

@ Bastla: "Ganz großes Tennis", wie man so schön sagt. Funktioniert einwandfrei und wurde aufgrund des schmalen und eleganten Prozeduraufrufs erstmal von mir bevorzugt. Dieser lässt sich ausgesprochen schön in einer Schleife realisieren.
Ich kann zwar nachvollziehen was innerhalb der vbs geschieht, für Detailbeschreibungen fehlt mir allerdings noch das syntaktische Wissen. Deshalb an dieser Stelle die Frage, ob ich Auszüge deiner Erklärungen in die Doku übernehmen dürfte? Hab nämlich keine Ahnung wie es sich bei solchen Sachverhalten mit Plagiaten verhält.

Die batch hängt, wie ich gestern feststellen musste, noch an einer anderen Stelle, die Übergabe der I/O-Pfade betreffend (ebenfalls in einer for-Schleife). Soll ich dafür einen neuen thread erstellen oder könnte man das ggf. auch noch hier besprechen?

Beste grüße,
Sebastian
Mitglied: Dertii
Dertii 12.05.2009 um 11:25:46 Uhr
Goto Top
Hallo nochmal,

ich sollte noch schnell etwas nachtragen, um Missverständnisse zu vermeiden, weil meine vorherige Nachricht ein wenig hochtrabend klang:
Es geht bei der angesprochenen Doku lediglich um einen Bericht, den ich bei meinem Professor einreichen muss. Da das vbs-skript weit über den Anforderungsbereich hinausgeht, wäre ich mir nicht zu schade zu erwähnen, dass ich mir dabei habe helfen lassen.

Gruß,
Sebastian aka Dertii
Mitglied: Dertii
Dertii 12.05.2009 um 15:07:17 Uhr
Goto Top
So,

ich habe jetzt schon wieder den ganzen Tag gebastelt und bin zu keinem Ergebnis gekommen.

Die "Das_ist_die_input_file.N1" und die "Das_ist_die_output_file.dim" tragen den selben Dateinamen. Die Dateierweiterung der input-files lautet stets ".N1" bei den output-files stets ".dim". Der Rest des Pfades ist willkürlich und muss deshalb dynmisch ausgelesen werden.
Ich habe schon alles mögliche probiert. Die Lösung die ich bisher verwendet habe stammt in anderer Form aus einem Forenbeitrag und macht aus der "datei_x.N1" (input) eine "datei_x.dim" (output):

SET "SOURCE_C2R=D:\Quelle\Bla"  
SET "TAR_PATH=D:\Ziel\Blub"  
SET "TEMP_DAT=%BATCH_HOME%\temp.dat"  

FOR /f "tokens=4 delims=\" %%b in (%SOURCE_C2R%) do (  
	FOR /f "tokens=1* delims=." %%c in ("%%b") do (  
		ECHO.%TAR_PATH%\%%c.dim>>%TEMP_DAT%
))


Die Variable SOURCE_C2R zeigt auf den Ordner auf dem alle zu prozessierenden Dateien abgelegt sind. Allerdings kann und soll der Anwender diesen Teil bei Benutzung selbst editieren oder falls ich noch genug Zeit habe, das Zielverzeichnis vor der eigentlichen Prozessierung in einem Menü abgefragt werden und in SOURCE_C2R gespeichert werden. Gleiches gilt für die Variable TAR_PATH. Der Rahmen für diese Menü steht bereis, aber was nützt mir ein Menü, wenn der wichtige Teil der batch nicht funktioniert!?!

Stören tut mich absolut der Zeiger auf den 4. Token --> Das ist total statisch und passt einfach nur gerade auf den Verzeichnisbaum den ich zum Testen der Prozessierung verwende.

Die Lösung über das Erstellen einer Temporär-Datei wird wieder sinnvoll, wenn man jeweils mittels der for-schleife nur eine einizige, nämlich die gerade prozessierte "datei_x.dim" (output) hineinschreibt und dann wieder ausliest um sie in die xml (siehe oben ) zu schreiben. Oder geht das auch ohne TEMP ... sollte eigentlich, wenn ich mir das recht überlege?

Vielen Dank an alle die sich die Mühe machen eine Lösung zu erarbeiten.

Gruß,
Sebastian
Mitglied: bastla
bastla 12.05.2009 um 16:11:49 Uhr
Goto Top
Hallo Sebastian!
... ob ich Auszüge deiner Erklärungen in die Doku übernehmen dürfte? Hab nämlich keine Ahnung wie es sich bei solchen Sachverhalten mit Plagiaten verhält.
Die Plagiatsfrage musst Du natürlich selbst (mit Deinem Professor) abklären - was mich anlangt, kannst Du das bisschen Code und die (eigentlich ohnehin nicht vorhandene) Doku gerne für was auch immer verwenden ...
Da es bei Deiner Zusatzbastelei (anscheinend) um eine Pfadzerlegung geht, solltest Du Dir einmal die Hilfe zu "for" (und dort - gegen Ende - den Teil bezüglich der "Ersetzung von Verweisen") ansehen - vielleicht reduziert sich das Problem dann auf etwas in der Art:
for %%i in ("%SOURCE_C2R%\*.N1") do set "dimPfad=%TAR_PATH%\%%~ni.dim"
Grüße
bastla
Mitglied: Dertii
Dertii 12.05.2009 um 16:34:55 Uhr
Goto Top
Mitglied: Dertii
Dertii 12.05.2009 um 16:43:56 Uhr
Goto Top
Tja, danke Bastla.

damit hat sich diese Problem auch erledigt. Dennoch verstehe ich die Verwendung der "Ersetzungsparameter" in einer for-schleife nicht. Ich hatte es mit folgendem probiert, was nicht funktionierte:

FOR %%a in ("%SOURCE_C2R%\*.N1") do (  
	set "File=%%~ni"  
	set "Extention=%%~xi"  
)

Warum nicht? Kann ich die Ersetzungsparameter nur als Ersatz für einen Teil des Pfades benutzen? Wenn ja, wie verwende ich dann %~nxi ?

Der völlig verwirrte Sebastian
Mitglied: bastla
bastla 12.05.2009 um 16:45:44 Uhr
Goto Top
Hallo Sebastian!
Deshalb gehe ich davon aus, dass die Variablen keinen Wert zugewiesen bekommen. Stimmt das?
Die Variablen erhalten zwar einen Wert (kannst Du erkennen, wenn Du die Ausgabe der Variableninhalte nach dem Schleifenende versuchst), aber der Interpreter liest den Wert nur einmalig zu Beginn der Schleife - da hatten sie wirklich (noch) keinen Inhalt ...

Um an die aktuellen Werte innerhalb der Schleife zu kommen, kannst Du entweder "delayedExpansion" oder ein Unterprogramm verwenden:
@echo off & setlocal enabledelayedexpansion
for %%a in ("%SOURCE_C2R%\*.N1") do (  
    set "File=%%~na"  
    set "Extension=%%~xa"  
    set "FileExt=%%~nxa"  
    echo !File!!Extension! oder auch !FileExt!
)
Unterprogrammvariante (verhält sich wie ein neuer Batch, daher auch %1 für den Übergabeparameter) :
@echo off & setlocal
for %%a in ("%SOURCE_C2R%\*.N1") do call :ProcessFile "%%a"  
goto :eof

:ProcessFile
set "File=%~n1"  
set "Extension=%~x1"  
set "FileExt=%~nx1"  
echo %File%%Extension% oder auch %FileExt%
goto :eof
Grüße
bastla

[Edit] Meine Antwort bezieht sich auf eine vorher etwas anders formulierte Fragestellung [/Edit]
Mitglied: Dertii
Dertii 12.05.2009 um 16:57:16 Uhr
Goto Top
Hallo Bastla,

dass der Interpreter auf diese Weise arbeitet war mir überhaupt nicht klar. Ich hatte mir zwar testweise per Echo die Variablen ausgeben lassen wollen, erhielt aber lediglich die Fehlermeldung "Echo ist ausgeschaltet (off)." --> wie du ja bereits feststelltest face-wink

Danke für deine Mühen.

Beste Grüße,
Sebastian

p.s. Sorry, dass ich den Kommentar oben gelöscht habe. Ich hatte nicht damit gerechnet, dass du so schnell antwortest. Allerdings gibt der darüberstehende ja ähnliches wieder.
Mitglied: Dertii
Dertii 12.05.2009 um 17:43:56 Uhr
Goto Top
Hey,

ich hoffe, dass ich noch vor der Schwelle zur Nervensäge stehe face-wink

Jetzt bekomme ich die nächste Fehlermeldung, die mir einen Kompilierungsfehler im vbs ausgibt "Anweisungsende erwartet" heißt es dort zuletzt. Hier der Auszug meines modifizierten Quelltexts:

@echo off & setlocal enabledelayedexpansion 

SET "SOURCE_C2R=D:\Quelle\Bla"  
SET "TAR_PATH=D:\Ziel\Blub"   
SET "TEMP_DAT=%BATCH_HOME%\temp.dat"   
SET "PARAMS_TXT=D:\Eine\textdatei.txt"  

set M=%temp%\ModifyPath.vbs
>%M%  echo Set fso=CreateObject("Scripting.FileSystemObject"):T=Split(fso.OpenTextFile("%REQUEST_XML%").ReadAll,vbCrLF)  
>>%M% echo T(6)="        <Parameter name="property_file" value=""" ^& WScript.Arguments(0) ^& """ />"  
>>%M% echo T(7)="        <InputProduct file=""" ^& WScript.Arguments(1) ^& """ />"  
>>%M% echo T(8)="        <OutputProduct file=""" ^& WScript.Arguments(2) ^& """ format=""BEAM-DIMAP"" />"  
>>%M% echo fso.CreateTextFile("%REQUEST_XML%",True).Write Join(T,vbCrLF)  


for %%a in ("%SOURCE_C2R%\*.N1") do (  
	
	set "DIM_PATH=%TAR_PATH%\%%~n1.dim"  
	cscript //nologo %M% %PARAMS_TXT% %%a %DIM_PATH% 
	
)


Grüße,
Sebastian
Mitglied: bastla
bastla 12.05.2009 um 17:56:13 Uhr
Goto Top
Hallo Sebastian!

Ohne der Variablen %REQUEST_XML% einen Wert zugewiesen zu haben, wird's mit dem Script etwas schwierig face-wink ...

Die Fehlermeldung bezieht sich allerdings auf die fehlenden Anführungszeichen um "property file" herum - diese müssen wiederum verdoppelt werden.

"delayedexpansion" kannst Du Dir übrigens sparen - wenn Du %DIM_PATH% nicht noch für andere Zwecke benötigen solltest, dann genügt eine Schleife der Art
for %%a in ("%SOURCE_C2R%\*.N1") do cscript //nologo %M% %PARAMS_TXT% %%a "%TAR_PATH%\%%~n1.dim"  
Andrenfalls müsste in Zeile 20 die Schreibweise für "%DIM_PATH%" allerdings "!DIM_PATH!" lauten.

Grüße
bastla
Mitglied: Dertii
Dertii 13.05.2009 um 11:50:29 Uhr
Goto Top
Hallo Bastla,

Ich verstehe den Interpreter nicht! Ich würde die Zeile ...
 
for %%a in ("%SOURCE_C2R%\*.N1") do cscript //nologo %M% %PARAMS_TXT% %%a "%TAR_PATH%\%%~n1.dim"  

... gern verwenden. Allerdings muss ich nach dem "do" eine Klammer aufmachen, da ein Anweisungsblock folgt. Der gesamte 1. (von 2) Prozessierungsschritt soll nämlich innerhalb der Schleife ablaufen. Sprich:
Dateiaufruf --> XML-edit --> Prozessierung --> 1. Prozessschritt fertig

Im Folgenden wieder mal ein Auszug aus meiner batch ... diesmal ohne Pseudonyme für die Variablen. Das setzen der Umgebungsvariablen aus dem Programmkopf spare ich mir ebenfalls, da vergesse ich bloß wieder die Hälfte face-wink
Mit doppeltem Doppelpunkt ein paar spärliche Kommentare:

@ECHO off & setlocal enabledelayedexpansion 

:: Environment-Variablen & ganz viel code :)

:C2R

echo.
echo Start C2R Processing ...

:: vbs-Script zum Editieren der request.xml
set M=%temp%\ModifyPath.vbs
>%M%  echo Set fso=CreateObject("Scripting.FileSystemObject"):T=Split(fso.OpenTextFile("%REQUEST_XML%").ReadAll,vbCrLF)  
>>%M% echo T(6)="        <Parameter name=""property_file"" value=""" ^& WScript.Arguments(0) ^& """ />"  
>>%M% echo T(7)="        <InputProduct file=""" ^& WScript.Arguments(1) ^& """ />"  
>>%M% echo T(8)="        <OutputProduct file=""" ^& WScript.Arguments(2) ^& """ format=""BEAM-DIMAP"" />"  
>>%M% echo fso.CreateTextFile("%REQUEST_XML%",True).Write Join(T,vbCrLF)  


:::::::::::::::::::::C2R-Prozessor::::::::::::::::::::::
:: Alle *.N1 im SOURCE_C2R-Quellverzeichnis werden prozessiert. 

for %%a in ("%SOURCE_C2R%\*.N1") do (  

	:: Aufruf des vbs-Skrips
	set "DIM_PATH=%TAR_PATH%\%%~n1.dim"   
	cscript //nologo %M% "%PARAMS_TXT%" "%%a" "!DIM_PATH!"  
	
	echo. Processing %%a  ...
	
	%JAVA_EXE% -Xmx1024M ^
	-Dceres.context=beam ^
	"-Dbeam.mainClass=org.esa.beam.framework.processor.ProcessorRunner" ^  
	"-Dbeam.processorClass=org.esa.beam.merisc2r.processor.MerisC2RProcessor" ^  
	"-Dbeam.home=%BEAM4_HOME%" ^  
	"-Dncsa.hdf.hdflib.HDFLibrary.hdflib=%HDF4_LIB%" ^  
	"-Dncsa.hdf.hdf5lib.H5.hdf5lib=%HDF5_LIB%" ^  
	-jar "%BEAM4_HOME%\bin\ceres-launcher.jar %*" ^  
	"%BATCH_HOME%\merisc2r-request.xml"  
)

echo C2R processing finished.
:::::::::::::::::ENDE C2R-Prozessor:::::::::::::::::

So würde ich das gern umsetzen. Allerdings editiert das vbs-skript den DIM_PATH in der request.xml folgendermaßen

        <OutputProduct file="D:\Sebastian\000\testbatch\%~n1.dim" format="BEAM-DIMAP" />  

Anstelle des eigentlichen Dateinamens ergänzt er den Ergänzungsparameter "%~n1.dim" ?!?

Ich hoffe, dass ich deine Hilfe ein letztes Mal beanspruchen darf.

Gruß,
Sebastian
Mitglied: miniversum
miniversum 13.05.2009 um 12:22:41 Uhr
Goto Top
Ändere
"DIM_PATH=%TAR_PATH%\%%~n1.dim"
in
"DIM_PATH=%TAR_PATH%\%~n1.dim"
Aus den zwei % wirs eines. Daher past das dannicht.
Die zwei % brauchst du nur bei Variabeln der For-Schleife.
Mitglied: Dertii
Dertii 13.05.2009 um 15:18:34 Uhr
Goto Top
Hallo miniversum,

mit dieser Änderung wird eine leere Variable überwiesen. Dann sieht die XML-Zeile folgendermaßen aus:

        <OutputProduct file="D:\Sebastian\000\testbatch\.dim" format="BEAM-DIMAP" />  

Sebastian
Mitglied: bastla
bastla 13.05.2009 um 15:26:50 Uhr
Goto Top
Hallo Sebastian!

Da Du %%a als Schleifenvariable verwendest, sollte es auch heißen:
set "DIM_PATH=%TAR_PATH%\%%~na.dim"
Grüße
bastla

P.S.: Nochmals die Frage, ob Du die Variable %DIM_PATH% später nochmals verwendest - wenn nicht, spare die Variable (und "delayedExpansion") ein und rufe in Zeile 26 das Script mit
cscript //nologo %M% "%PARAMS_TXT%" "%%a" "%TAR_PATH%\%%~na.dim"
auf ...
Mitglied: Dertii
Dertii 13.05.2009 um 16:03:59 Uhr
Goto Top
Hi Miniversum,

Ändere
> "DIM_PATH=%TAR_PATH%\%%~n1.dim"
in
> "DIM_PATH=%TAR_PATH%\%~n1.dim"

dein Vorschlag funktioniert nur, wenn ich den gesamten Anweisungsblock kapselen und mit einer Sprungmarke versehen würde und in dann mit "call" aufrufe. Dann weiß ich allerdings nicht wie ich den "loop" gestalten soll, dass er die Datein so wie sie übergeben werden abarbeiet und wieder neustartet. Ich könnte die gesammte Kernschleife der Prozessierung in eine eigenständige "bat" extrahieren. Damit würde sich die Verwaltung für den unbedarften Anwender allerdings erschweren ...

Hier ein Bsp. wie es nicht (!!!) funktioniert:

for %%a in ("%SOURCE_C2R%\*.N1") do call :C2R_LOOP "%%a"  

:C2R_LOOP
IF "%1"=="" GOTO C2R_END  
IF NOT "%1"=="" (  
	:: Aufruf des vbs-Skrips
	cscript //nologo %M% "%PARAMS_TXT%" "%1" "%TAR_PATH%\%~n1.dim"  
	
	echo. Processing %1  ...
	GOTO C2R_LOOP
)

:C2R_END
echo C2R Processing finished.

... nicht wundern: Die Prozessierung mit Java fehlt in dieser Version.

Gruß,
Sebastian
Mitglied: Dertii
Dertii 13.05.2009 um 16:06:43 Uhr
Goto Top
Hi Bastla,

hab ich bereits alles ausprobiert. Geht aber leider nicht.
Und ich muss gleich los .. dabei wollte ich das doch heute nacht laufen lassen face-sad
Mitglied: miniversum
miniversum 13.05.2009 um 16:24:49 Uhr
Goto Top
Dan amchs doch so (ist sowieso, gerade bei längeren Geschichten übersichtlicher):
for %%a in ("%SOURCE_C2R%\*.N1") do goto:C2R_LOOP "%%a"  
goto:eof

:C2R_LOOP
	:: Aufruf des vbs-Skrips
	cscript //nologo %M% "%PARAMS_TXT%" "%1" "%TAR_PATH%\%~n1.dim"  
	
	echo. Processing %1  ...
echo C2R Processing finished.
goto:eof
Mitglied: Dertii
Dertii 14.05.2009 um 12:58:12 Uhr
Goto Top
Hallo Bastla,

fast drei Tage Kopfzerbrechen für nix. Der Fehler lag in meinem stupfsinnigen Umgang mit der "Dos-help". Darauf, dass sich das letzte Zeichen bei %%~ni oder %~n1 oder was auch immer explizit auf die Variable bezieht, bin ich naürlich nicht gekommen. Dabei hattest du mir alles so schön aufbereitet.

Mittlerweile hatte ich den kompletten Abschnitt in eine eigene batch gepackt und per "call" augerufen. Da ich mir hierbei allerdings Gedanken um die Variablenübergabe machen musste, ist es mir währenddessen wie Schuppen von den Augen gefallen ... blind war ich!!!

Also beste Grüße an dich und Miniversum und nochmals Danke für eure Hilfe.

Bis bald in einem anderen thread.
Dertii