Batch | variables Menü

Palladin007

assimiliert
Ich möchte ein Menü in eine Batch-Datei einbauen.

Das soll relativ einfach sein, ungefähr in dem Stil:

Code:
=============
/////////////
//         //
//   Text  //
//         //
/////////////
=============

Recht einfach.
Wenn ich dann da aber eine Variable eingebe, dann kann ich das Menü nur an meine Ausgabe anpassen.
Das Problem sind dabei hauptsächlich Umgebungs-Variablen. Wenn ich z. B. %temp% nehme, wird ein Pfad angezeigt, der nicht immer gleich lang ist.

Und damit mein Menü sich dann an die Länge der Variablen-Ausgabe anpasst, habe ich das geschrieben:

Code:
set Nr=0
:Loopa
set "Char=!temp:~%Nr%,1!"
if "%Char%"=="" goto :loop1
set /a Nr+=1
goto :Loopa
:loop1
set /a nr-=6

Es zählt die Anzahl der Zeichen, die die Variable gespeichert hat und zieht 6 ab, damit am Ende nur noch die Anzahl gespeichert ist, die ich brauche.
Damit dann nicht das passiert:

Wie ich mir das gedacht habe, sieht man sich am besten an, wenn es fertig ist^^

Aber dafür brauche ich ein Script, dass eine vorgegebene Anzahl von bestimmten Zeichen schreibt und in einer Variable abspeichert.
Wenn die Anzahl 5 sind, dann heist die Variable aaaaa. Wenn sie 7 ist, dann heist sie sssssss.

Aber wie mache ich das?
 
Tja, das schreiben der vorgegebenen Anzahl an Zeichen ist wahrscheinlich einfach, aber ich kriege es nicht hin, dass das Menü am Ende auch wirklich variabel ist.

Wenn der änderbare Text kleiner ist, als die breite des Menüs, geht alles auf. Wenn es großer ist, geht es auf, aber dazwischen gibt es ein paar Stellen, da sind es zu viele und zu wenige Zeichen und aus dem ganzen wird eine Endlos-Schleie :(

Ich versuch das noch möglichst übersichtlich zu machen, dann poste ich es hier. Vielleicht habt ihr ja eine bessere Idee, als ich.
 
Hab mich jetzt nochmal in einer ruhigen Minuten hin gesetzt und fest gestellt, dass ich da einen totalen Blödsinn zusammen gerechnet habe :D

Jetzt funktioniert es. Egal, was temp gespeichert hat, das Menü passt sich an.


Code:
@echo off
setlocal EnableDelayedExpansion

::::Rest des Programms::::::::::::::::::::::::::::::::::::

cls

set pfad=[--------Pfad--------]
:new_pfad

set nr=0
:Loop
set "Char=!pfad:~%Nr%,1!"
if "%Char%"=="" goto :loop_end
set /a nr+=1
goto :Loop
:loop_end
set /a nr+=1

if %nr% lss 36 goto :x

set /a nr-=36
set n=%nr%

:Loop_a
set /a nr-=1
set space=%space% 
if not %nr%==0 goto :Loop_a

set nr=%n%
:Loop_b
set /a nr-=1
set slash=%slash%/
if not %nr%==0 goto :Loop_b

set nr=%n%
:Loop_c
set /a nr-=1
set gleich=%gleich%=
if not %nr%==0 goto :Loop_c

goto :menü_a

:x
set gleich=
set slash=
set space=
set /a nr=36-%nr%
:Loop_x
set /a nr-=1
set space_pfad=%space_pfad% 
if not %nr%==0 goto :Loop_x

:menü_a
echo Programm-Manager v1.00      by Palladin007
echo.
echo.
echo     ==%gleich%==========================================================
echo     //%slash%//////////////////////////////////////////////////////////
echo     //                                                        %space%//
echo     //  Das Programm wird in den folgenden Pfad installiert:  %space%//
echo     //                                                        %space%//
echo     //  %pfad%\Programm-Manager  %space_pfad%//                        
echo     //                                                        %space%//
echo     //%slash%//////////////////////////////////////////////////////////
echo     //                                                        %space%//
echo     //  Wollen sie den Installationsordner ändern?            %space%//
echo     //                                                        %space%//
echo     //%slash%//////////////////////////////////////////////////////////
echo     ==%gleich%==========================================================
echo.
echo.

::::Rest des Programms::::::::::::::::::::::::::::::::::::


Zum testen könnt ihr ja am Anfang noch mal set /p temp= einbauen. Das akzeptiert er und so könnt ihr gigantische Zeichenketten angeben, das Menü passt sich an.


Edit:
Wenn ihr das selber verwenden wollt, müsst ihr halt auch selber nachdenken und die Zahlen eintragen^^
Aber das System bleibt das gleiche


Edit2:
Mein Fehler ist korrigiert^^
Jetzt müsste alles so funktionieren, wie es soll.
 
Zuletzt bearbeitet:
Oben