Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

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

Frage Entwicklung Batch & Shell

Mitglied: Dertii

Dertii (Level 1) - Jetzt verbinden

11.05.2009, aktualisiert 12:44 Uhr, 4881 Aufrufe, 20 Kommentare

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:

01.
        <InputProduct file="Das_ist_die_input_file.N1" /> 
02.
        <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
Mitglied: miniversum
11.05.2009 um 13:23 Uhr
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:
01.
set "XMLfile=org.xml" 
02.
set "tempXMLFile=temp_%XMLfile%" 
03.
set "space=        " 
04.
set "infile=Das_ist_die_input_file.N1" 
05.
set "outfile=Das_ist_die_output_file.dim" 
06.
 
07.
echo XML Zeile1>"%tempXMLFile%" 
08.
echo XML Zeile2>>"%tempXMLFile%" 
09.
echo XML Zeile3>>"%tempXMLFile%" 
10.
echo XML Zeile4>>"%tempXMLFile%" 
11.
echo XML Zeile5>>"%tempXMLFile%" 
12.
echo XML Zeile6>>"%tempXMLFile%" 
13.
echo XML Zeile7>>"%tempXMLFile%" 
14.
echo %space%^<InputProduct file="%infile%" /^>>>"%tempXMLFile%" 
15.
echo %space%^<OutputProduct file="%outfile%" format="BEAM-DIMAP" /^>>>"%tempXMLFile%" 
16.
more +9 "%XMLfile%">>"%tempXMLFile%" 
17.
... 
18.
tu was mit der temponären xml Datei 
19.
... 
20.
del "%tempXMLFile%"
Bitte warten ..
Mitglied: bastla
11.05.2009 um 15:53 Uhr
Hallo Dertii und willkommen als Mitglied!

Da ich mich irgendwie angesprochen fühle (und Du VBS explizit nicht ausgeschlossen hast), ein Ansatz mit einem (vom Batch erzeugtem) VB-Script:
01.
@echo off & setlocal 
02.
set "XMLFile=D:\Datei.xml" 
03.
 
04.
set M=%temp%\ModifyPath.vbs 
05.
>%M%  echo Set fso=CreateObject("Scripting.FileSystemObject"):T=Split(fso.OpenTextFile("%XMLFile%").ReadAll,vbCrLF) 
06.
>>%M% echo T(7)="        <InputProduct file=""" ^& WScript.Arguments(0) ^& """ />" 
07.
>>%M% echo T(8)="        <OutputProduct file=""" ^& WScript.Arguments(1) ^& """ format=""BEAM-DIMAP"" />" 
08.
>>%M% echo fso.CreateTextFile("%XMLFile%",True).Write Join(T,vbCrLF) 
09.
 
10.
::Demo mehrfacher Aufruf 
11.
cscript //nologo %M% "Das_ist_die_input_file.N1" "Das_ist_die_output_file.dim" 
12.
type "%XMLFile%" 
13.
echo\ 
14.
cscript //nologo %M% "ein_anderes_rein.N1" "und_wieder_raus.dim" 
15.
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
Bitte warten ..
Mitglied: Dertii
12.05.2009 um 09:24 Uhr
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
Bitte warten ..
Mitglied: Dertii
12.05.2009 um 11:25 Uhr
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
Bitte warten ..
Mitglied: Dertii
12.05.2009 um 15:07 Uhr
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):

01.
 
02.
SET "SOURCE_C2R=D:\Quelle\Bla" 
03.
SET "TAR_PATH=D:\Ziel\Blub" 
04.
SET "TEMP_DAT=%BATCH_HOME%\temp.dat" 
05.
 
06.
FOR /f "tokens=4 delims=\" %%b in (%SOURCE_C2R%) do ( 
07.
	FOR /f "tokens=1* delims=." %%c in ("%%b") do ( 
08.
		ECHO.%TAR_PATH%\%%c.dim>>%TEMP_DAT% 
09.
))

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
Bitte warten ..
Mitglied: bastla
12.05.2009 um 16:11 Uhr
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
Bitte warten ..
Mitglied: Dertii
12.05.2009 um 16:34 Uhr
Bitte warten ..
Mitglied: Dertii
12.05.2009 um 16:43 Uhr
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:

01.
FOR %%a in ("%SOURCE_C2R%\*.N1") do ( 
02.
	set "File=%%~ni" 
03.
	set "Extention=%%~xi" 
04.
)
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
Bitte warten ..
Mitglied: bastla
12.05.2009 um 16:45 Uhr
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:
01.
@echo off & setlocal enabledelayedexpansion 
02.
for %%a in ("%SOURCE_C2R%\*.N1") do ( 
03.
    set "File=%%~na" 
04.
    set "Extension=%%~xa" 
05.
    set "FileExt=%%~nxa" 
06.
    echo !File!!Extension! oder auch !FileExt! 
07.
)
Unterprogrammvariante (verhält sich wie ein neuer Batch, daher auch %1 für den Übergabeparameter) :
01.
@echo off & setlocal 
02.
for %%a in ("%SOURCE_C2R%\*.N1") do call :ProcessFile "%%a" 
03.
goto :eof 
04.
 
05.
:ProcessFile 
06.
set "File=%~n1" 
07.
set "Extension=%~x1" 
08.
set "FileExt=%~nx1" 
09.
echo %File%%Extension% oder auch %FileExt% 
10.
goto :eof
Grüße
bastla

[Edit] Meine Antwort bezieht sich auf eine vorher etwas anders formulierte Fragestellung [/Edit]
Bitte warten ..
Mitglied: Dertii
12.05.2009 um 16:57 Uhr
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

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.
Bitte warten ..
Mitglied: Dertii
12.05.2009 um 17:43 Uhr
Hey,

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

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:

01.
 
02.
@echo off & setlocal enabledelayedexpansion  
03.
 
04.
SET "SOURCE_C2R=D:\Quelle\Bla" 
05.
SET "TAR_PATH=D:\Ziel\Blub"  
06.
SET "TEMP_DAT=%BATCH_HOME%\temp.dat"  
07.
SET "PARAMS_TXT=D:\Eine\textdatei.txt" 
08.
 
09.
set M=%temp%\ModifyPath.vbs 
10.
>%M%  echo Set fso=CreateObject("Scripting.FileSystemObject"):T=Split(fso.OpenTextFile("%REQUEST_XML%").ReadAll,vbCrLF) 
11.
>>%M% echo T(6)="        <Parameter name="property_file" value=""" ^& WScript.Arguments(0) ^& """ />" 
12.
>>%M% echo T(7)="        <InputProduct file=""" ^& WScript.Arguments(1) ^& """ />" 
13.
>>%M% echo T(8)="        <OutputProduct file=""" ^& WScript.Arguments(2) ^& """ format=""BEAM-DIMAP"" />" 
14.
>>%M% echo fso.CreateTextFile("%REQUEST_XML%",True).Write Join(T,vbCrLF) 
15.
 
16.
 
17.
for %%a in ("%SOURCE_C2R%\*.N1") do ( 
18.
	 
19.
	set "DIM_PATH=%TAR_PATH%\%%~n1.dim" 
20.
	cscript //nologo %M% %PARAMS_TXT% %%a %DIM_PATH%  
21.
	 
22.
)

Grüße,
Sebastian
Bitte warten ..
Mitglied: bastla
12.05.2009 um 17:56 Uhr
Hallo Sebastian!

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

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
01.
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
Bitte warten ..
Mitglied: Dertii
13.05.2009 um 11:50 Uhr
Hallo Bastla,

Ich verstehe den Interpreter nicht! Ich würde die Zeile ...
01.
  
02.
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
Mit doppeltem Doppelpunkt ein paar spärliche Kommentare:

01.
@ECHO off & setlocal enabledelayedexpansion  
02.
 
03.
:: Environment-Variablen & ganz viel code :) 
04.
 
05.
:C2R 
06.
 
07.
echo. 
08.
echo Start C2R Processing ... 
09.
 
10.
:: vbs-Script zum Editieren der request.xml 
11.
set M=%temp%\ModifyPath.vbs 
12.
>%M%  echo Set fso=CreateObject("Scripting.FileSystemObject"):T=Split(fso.OpenTextFile("%REQUEST_XML%").ReadAll,vbCrLF) 
13.
>>%M% echo T(6)="        <Parameter name=""property_file"" value=""" ^& WScript.Arguments(0) ^& """ />" 
14.
>>%M% echo T(7)="        <InputProduct file=""" ^& WScript.Arguments(1) ^& """ />" 
15.
>>%M% echo T(8)="        <OutputProduct file=""" ^& WScript.Arguments(2) ^& """ format=""BEAM-DIMAP"" />" 
16.
>>%M% echo fso.CreateTextFile("%REQUEST_XML%",True).Write Join(T,vbCrLF) 
17.
 
18.
 
19.
:::::::::::::::::::::C2R-Prozessor:::::::::::::::::::::: 
20.
:: Alle *.N1 im SOURCE_C2R-Quellverzeichnis werden prozessiert.  
21.
 
22.
for %%a in ("%SOURCE_C2R%\*.N1") do ( 
23.
 
24.
	:: Aufruf des vbs-Skrips 
25.
	set "DIM_PATH=%TAR_PATH%\%%~n1.dim"  
26.
	cscript //nologo %M% "%PARAMS_TXT%" "%%a" "!DIM_PATH!" 
27.
	 
28.
	echo. Processing %%a  ... 
29.
	 
30.
	%JAVA_EXE% -Xmx1024M ^ 
31.
	-Dceres.context=beam ^ 
32.
	"-Dbeam.mainClass=org.esa.beam.framework.processor.ProcessorRunner" ^ 
33.
	"-Dbeam.processorClass=org.esa.beam.merisc2r.processor.MerisC2RProcessor" ^ 
34.
	"-Dbeam.home=%BEAM4_HOME%" ^ 
35.
	"-Dncsa.hdf.hdflib.HDFLibrary.hdflib=%HDF4_LIB%" ^ 
36.
	"-Dncsa.hdf.hdf5lib.H5.hdf5lib=%HDF5_LIB%" ^ 
37.
	-jar "%BEAM4_HOME%\bin\ceres-launcher.jar %*" ^ 
38.
	"%BATCH_HOME%\merisc2r-request.xml" 
39.
40.
 
41.
echo C2R processing finished. 
42.
:::::::::::::::::ENDE C2R-Prozessor:::::::::::::::::
So würde ich das gern umsetzen. Allerdings editiert das vbs-skript den DIM_PATH in der request.xml folgendermaßen

01.
        <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
Bitte warten ..
Mitglied: miniversum
13.05.2009 um 12:22 Uhr
Ä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.
Bitte warten ..
Mitglied: Dertii
13.05.2009 um 15:18 Uhr
Hallo miniversum,

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

01.
        <OutputProduct file="D:\Sebastian\000\testbatch\.dim" format="BEAM-DIMAP" />
Sebastian
Bitte warten ..
Mitglied: bastla
13.05.2009 um 15:26 Uhr
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 ...
Bitte warten ..
Mitglied: Dertii
13.05.2009 um 16:03 Uhr
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:

01.
for %%a in ("%SOURCE_C2R%\*.N1") do call :C2R_LOOP "%%a" 
02.
 
03.
:C2R_LOOP 
04.
IF "%1"=="" GOTO C2R_END 
05.
IF NOT "%1"=="" ( 
06.
	:: Aufruf des vbs-Skrips 
07.
	cscript //nologo %M% "%PARAMS_TXT%" "%1" "%TAR_PATH%\%~n1.dim" 
08.
	 
09.
	echo. Processing %1  ... 
10.
	GOTO C2R_LOOP 
11.
12.
 
13.
:C2R_END 
14.
echo C2R Processing finished.
... nicht wundern: Die Prozessierung mit Java fehlt in dieser Version.

Gruß,
Sebastian
Bitte warten ..
Mitglied: Dertii
13.05.2009 um 16:06 Uhr
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
Bitte warten ..
Mitglied: miniversum
13.05.2009 um 16:24 Uhr
Dan amchs doch so (ist sowieso, gerade bei längeren Geschichten übersichtlicher):
01.
for %%a in ("%SOURCE_C2R%\*.N1") do goto:C2R_LOOP "%%a" 
02.
goto:eof 
03.
 
04.
:C2R_LOOP 
05.
	:: Aufruf des vbs-Skrips 
06.
	cscript //nologo %M% "%PARAMS_TXT%" "%1" "%TAR_PATH%\%~n1.dim" 
07.
	 
08.
	echo. Processing %1  ... 
09.
echo C2R Processing finished. 
10.
goto:eof
Bitte warten ..
Mitglied: Dertii
14.05.2009 um 12:58 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
PHP
gelöst Externe XML-Datei in PHP auslesen (18)

Frage von Akrosh zum Thema PHP ...

VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

XML
XML Datei Fehler? (1)

Frage von Patrick-IT zum Thema XML ...

Batch & Shell
Script zum XML Datei Umschreiben (12)

Frage von cberndt zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...