mfjust
Goto Top

Weitergabe von Variablen in for-Schleifen

Hallo,
Ich versuche HTML Dateien in PDFs umzuwandeln (dies funktioniert) und diese dabei nach Teilen dieser HTML Datei umzubenennen (funktioniert nicht).
Leider schaffe ich es nicht, dass Variable "datei" an :filiale und :zahlart weitergegeben wird, genauso wie "varF" und "varZ" im Hauptteil weiterverwendet werden können.

Die einzelnen Programmteile für sich allein funktionieren.

for /r %%v in (*.html) do (

call :filiale

call :zahlart

"P:\Program Files\wkhtmltopdf\bin\wkhtmltopdf" %%v %%f_%%z_%%~nv.pdf  
)

pause

:: Set var= 
goto :eof 
 
~~~ 
:setvarFixLine 
If %cnt%==%1 Set "Var=%~2"   
Set /a "cnt+=1"  
goto :eof

:filiale
Set /a "cnt=1"  
Set /a "n=26"  
for /F "Tokens=*" %%i in (%%v) do call :setvarFixLine %n% "%%i"  
set Var=%Var:~0,-4%
set f=%Var:~17%
Echo n-te Zeile, n=%n%: [%f%]
goto :eof 


:zahlart
Set /a "cnt=1"   
Set /a "n=27"   
for /F "Tokens=*" %%i in (%%v) do call :setvarFixLine %n% "%%i"    
set Var=%Var:~0,-4%
set z=%Var:~9%
Echo n-te Zeile, n=%n%: [%z%] 
goto :eof 

Könnt ihr mir sagen, wo der Fehler steckt, oder wie ich es besser machen kann?
Vielen Dank für eure Mühe.

Content-Key: 270166

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

Ausgedruckt am: 28.03.2024 um 21:03 Uhr

Mitglied: rubberman
rubberman 25.04.2015 aktualisiert um 14:20:30 Uhr
Goto Top
Hallo MFJust.

Könnt ihr mir sagen, wo der Fehler steckt
Das sind gleich mehrere. In Zeile 7 wären %%f und %%z nicht existierende FOR Variablen. Wenn schon, dann %f% und %z%. Aber auch das wird nicht funktionieren, da Umgebungsvariablen innerhalb einer Kommandozeile oder eines (in Klammern eingeschlossenen) Blocks von Kommandozeilen, nur einmal zum Wert expandiert wird, und zwar noch bevor die Zeile / der Block ausgeführt wird. Der Rumpf deiner FOR /R Schleife ist so ein Block.
Abhilfe schafft die "Verzögerte Variablenerweiterung". Aktiviert wird sie per
setlocal EnableDelayedExpansion
Die Syntax für Umgebungsvariablen ändert sich dahingehend, dass die umschließenden Prozentzeichen durch Ausrufezeichen ersetzt werden.
ungetestet:
for /r %%v in (*.html) do (
  set "file=%%~v"  
  set "filename=%%~nv"  
  call :filiale
  call :zahlart
  setlocal EnableDelayedExpansion
  "P:\Program Files\wkhtmltopdf\bin\wkhtmltopdf" "!file!" "!f!_!z!_!filename!.pdf"  
  endlocal
)

oder wie ich es besser machen kann
So ziemlich jede Sprache ist besser um HTML zu parsen, als Batch face-wink

Grüße
rubberman