Zu viele Variablen in Batch-Script? Speicherproblem?
Ich habe diverse Batch-Scripts, mit denen ich das AFDKO (Adobe Font Development Kit for OpenType) steuere. Diese Scripts callen ein weiteres Batch-Script, in dem derzeit 92 Variablen gesetzt werden, nämlich die Pfade zu Python-Scripts, Programmen (exe) und Ordnern. Nachdem ich vor ein paar Tagen das AFDKO neu aufgebaut habe, habe ich festgestellt, dass es beim Abarbeiten einiger Scripts zum Crash eines Programms kommt, das von einem der Python-Scripts aufgerufen wird.
Ich habe den Fehler auf Github im AFDKO-Bereich gemeldet, habe heute aber nochmal selbst versucht, dem Problem auf die Spur zu kommen und irgendwann festgestellt, dass es offenbar daran liegt, dass ich zu viele Variablen in dem gecallten Batch-Script setze. Wenn ich von den 92 Variablen die letzten 27 lösche, crasht das Programm nicht mehr. Ich könnte das Batch-Script, in dem die Variablen gesetzt werden, zwar abspecken oder jedes der anderen Batch-Scripts nur die Variablen setzten lassen, die es selbst braucht, aber Grund für die Zentralisierung war, dass sich mit der Entwicklung des AFDKO und seiner Module regelmäßig die Pfade zu den Python-Scripts und anderen Dateien ändern und ich meine Batch-Scripts wesentlich bequemer an neue Versionen des AFDKO anpassen kann, wenn ich die Pfade in einem zentralen Batch-Script in Variablen speichere.
Wie löse ich das Problem am Besten? Kann ich den Speicher, der für Variablen zur Verfügung steht, irgendwie erweitern? Und was genau ist überhaupt Ursache des Problems? Meine Tests haben ergeben, dass es nicht an der reinen Anzahl der Variablen, die ich setze, liegt, sondern eher an dem Speicherplatz, den sie einnehmen. Den Pfad zum FDK habe ich z. B. von C:\FDK_Datum auf C:\FDK gekürzt und konnte dadurch mindestens eine Variable mehr setzen.
Das Batch-Script, in dem die Variablen gesetzt werden, sieht etwa so aus. Ich habe es etwas gekürzt.
Ich habe den Fehler auf Github im AFDKO-Bereich gemeldet, habe heute aber nochmal selbst versucht, dem Problem auf die Spur zu kommen und irgendwann festgestellt, dass es offenbar daran liegt, dass ich zu viele Variablen in dem gecallten Batch-Script setze. Wenn ich von den 92 Variablen die letzten 27 lösche, crasht das Programm nicht mehr. Ich könnte das Batch-Script, in dem die Variablen gesetzt werden, zwar abspecken oder jedes der anderen Batch-Scripts nur die Variablen setzten lassen, die es selbst braucht, aber Grund für die Zentralisierung war, dass sich mit der Entwicklung des AFDKO und seiner Module regelmäßig die Pfade zu den Python-Scripts und anderen Dateien ändern und ich meine Batch-Scripts wesentlich bequemer an neue Versionen des AFDKO anpassen kann, wenn ich die Pfade in einem zentralen Batch-Script in Variablen speichere.
Wie löse ich das Problem am Besten? Kann ich den Speicher, der für Variablen zur Verfügung steht, irgendwie erweitern? Und was genau ist überhaupt Ursache des Problems? Meine Tests haben ergeben, dass es nicht an der reinen Anzahl der Variablen, die ich setze, liegt, sondern eher an dem Speicherplatz, den sie einnehmen. Den Pfad zum FDK habe ich z. B. von C:\FDK_Datum auf C:\FDK gekürzt und konnte dadurch mindestens eine Variable mehr setzen.
Das Batch-Script, in dem die Variablen gesetzt werden, sieht etwa so aus. Ich habe es etwas gekürzt.
@echo off
set "FDK=C:\FDK"
set "perl_exe=C:\Perl\bin\perl.exe"
set "Tools=%FDK%\Tools"
set "win=%Tools%\win"
set "PATH=%win%;%PATH%"
set "SharedData=%Tools%\SharedData"
set "FDKScripts=%SharedData%\FDKScripts"
set "PythonDir=%win%\Python\AFDKOPython27"
set "python_exe=%PythonDir%\python.exe"
set "sitepackages=%PythonDir%\Lib\site-packages"
set "fontTools=%sitepackages%\fonttools-3.15.2.dev0-py2.7.egg\fontTools"
set "ufonormalizer=%sitepackages%\ufonormalizer-0.1-py2.7.egg"
set "tab=%fontTools%\ttLib\tables"
set "autohint_py=%FDKScripts%\autohint.py"
set "autohint_py_Com=%python_exe% %autohint_py%"
[Hier werden etwa 40 weitere Variablen gesetzt, u. z.
Paare aus dem Pfad zum jeweiligen Python-Script und der Anweisung
an Python, das jeweilige Python-Script abzuarbeiten.]
For /f "delims=\ tokens=1,2" %%i in ("%~dp0") do (
Set "rootDir=%%i"
Set "Dir1=%%j"
)
set "Scripts_and_Exe_Tools=%rootDir%\%Dir1%\Scripts_and_Exe_Tools"
set "Python_Scripts=%Scripts_and_Exe_Tools%\Python_Scripts"
set "Perl_Scripts=%Scripts_and_Exe_Tools%\Perl_Scripts\Scripts"
set "Exe_Tools=%Scripts_and_Exe_Tools%\Exe_Tools"
set "subst_py=%Python_Scripts%\subst.py"
set "subst_py_Com=%python_exe% %subst_py%"
[Hier werden etwa 20 weitere Variablen gesetzt, u. z.
Paare aus dem Pfad zum jeweiligen Python-Script und der Anweisung
an Python, das jeweilige Python-Script abzuarbeiten.]
set "setsnap_pl=%Perl_Scripts%\setsnap.pl"
set "setsnap_pl_Com=%perl_exe% %setsnap_pl%"
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 350607
Url: https://administrator.de/contentid/350607
Ausgedruckt am: 24.11.2024 um 15:11 Uhr
2 Kommentare
Neuester Kommentar