Zeilenanzahl einer Datei ermitteln und einer Variable zuordnen womit später beim choice Befehl Auswahloptionen gesetzt werden sollen
Es geht darum ein Auswahl-Menü anzuzeigen was aus einer kleinen "config.cfg" Datei erzeugt und dargestellt wird. Dabei kann es sein, dass der Menü-Umfang (Zeilenanzahl) immer wieder etwas unterschiedlich sein kann. Mein Problem ist nun, wie bekomme ich es hin, dem "choice.exe" Befehl die richtigen Optionen (zulässiges Auswahl Argument) mitzugeben.
Das sind mal meine Gedanken dazu;
rem --- define variables --- (das kommt normalerweise aus einer anderen FOR schleife)
set choice1=1
set choice2=2
set choice3=3
set choice4=a
set choice5=b
set choice6=g
set choice7=0
set choice8=t
set zeilen=8
for /L %%z in (1,1,%zeilen%) do echo|echo.|set /p = %%choice%%z%%>>%options%
choice /C %options% /M "Your choice please :"
das sollte als Ausgabe erscheine; Your choice please : [1,2,3,a,b,g,0,t]?
Das Problem ist nun wie bekomme ich es hin, dass was in der FOR-Schleife erzeugt wird in eine Variable zu schreiben, den das umleiten in eine Datei klappt.
FOR schleife <Befehle>......>>options.tmp
set /P options=<options.tmp
choice /C %options% /M "Your choice please :"
Ich glaube ich habe mich da etwas verrannt, ich habe momentan keine Idee mehr, wie ich das in eine Variable bekomme, den Workaround mit den temporären File ist nicht akzeptable.
Vielen Dank
Matthias
Das sind mal meine Gedanken dazu;
rem --- define variables --- (das kommt normalerweise aus einer anderen FOR schleife)
set choice1=1
set choice2=2
set choice3=3
set choice4=a
set choice5=b
set choice6=g
set choice7=0
set choice8=t
set zeilen=8
for /L %%z in (1,1,%zeilen%) do echo|echo.|set /p = %%choice%%z%%>>%options%
choice /C %options% /M "Your choice please :"
das sollte als Ausgabe erscheine; Your choice please : [1,2,3,a,b,g,0,t]?
Das Problem ist nun wie bekomme ich es hin, dass was in der FOR-Schleife erzeugt wird in eine Variable zu schreiben, den das umleiten in eine Datei klappt.
FOR schleife <Befehle>......>>options.tmp
set /P options=<options.tmp
choice /C %options% /M "Your choice please :"
Ich glaube ich habe mich da etwas verrannt, ich habe momentan keine Idee mehr, wie ich das in eine Variable bekomme, den Workaround mit den temporären File ist nicht akzeptable.
Vielen Dank
Matthias
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 132436
Url: https://administrator.de/forum/zeilenanzahl-einer-datei-ermitteln-und-einer-variable-zuordnen-womit-spaeter-beim-choice-befehl-132436.html
Ausgedruckt am: 06.04.2025 um 18:04 Uhr
6 Kommentare
Neuester Kommentar
Hallo mhuelse,
sorry, das ist mir jetzt alles etwas verworren. Ich beschränke mich mal auf den Titel deines Threads.
Der Punkt hinter dem ersten FINDSTR dient dazu, dass nur Zeilen mit Inhalt gezählt werden. Alternativ kannst du an dieser Stelle "^" bzw § einsetzen.
Grüße
rubberman
sorry, das ist mir jetzt alles etwas verworren. Ich beschränke mich mal auf den Titel deines Threads.
@echo off &setlocal
for /f "delims=:" %%a in ('findstr . deineDatei.txt^|findstr /n "^"') do set /a Anzahl=%%a
echo %Anzahl%
pause
Der Punkt hinter dem ersten FINDSTR dient dazu, dass nur Zeilen mit Inhalt gezählt werden. Alternativ kannst du an dieser Stelle "^" bzw § einsetzen.
Grüße
rubberman
Hallo mhuelse,
dann vielleicht in der Form:
Grüße
rubberman
<edit>
Kommata entfernt (die Syntax von Choice ist mir als XP User nicht so geläufig)
</edit>
dann vielleicht in der Form:
@echo off &setlocal
for /f "delims=:" %%a in ('findstr . deineDatei.txtt^|findstr /n "^"') do set /a Anzahl=%%a
set "Optionen=123456789abcdefghijklmnopqrstuvwxyz"
call set Optionen=%%Optionen:~,%Anzahl%%%
echo %Optionen%
pause
Grüße
rubberman
<edit>
Kommata entfernt (die Syntax von Choice ist mir als XP User nicht so geläufig)
</edit>
Hallo mhuelse,
eine temporäre Auslagerung gibt es afaik nicht.
Da ich nicht weiß, was du mit "erste Spalte" meinst, und ich nicht verstehe, warum ein Zeilenumbruch an die Variable hinzugefügt wird, hier nochmal ein kleines Konstrukt als Beispiel.
Wenn du eine Datei "Beispiel.txt" mit folgendem Inhalt hast:
dann verstehe ich als "erste Spalte" im Beispiel, alles vor dem Semikolon.
Somit kannst du dir die Optionen wie folgt zusammen bauen:
*.bat
Grüße
rubberman
eine temporäre Auslagerung gibt es afaik nicht.
Da ich nicht weiß, was du mit "erste Spalte" meinst, und ich nicht verstehe, warum ein Zeilenumbruch an die Variable hinzugefügt wird, hier nochmal ein kleines Konstrukt als Beispiel.
Wenn du eine Datei "Beispiel.txt" mit folgendem Inhalt hast:
1;abc
3;def
2;ghi
a;jkl
Somit kannst du dir die Optionen wie folgt zusammen bauen:
*.bat
@echo off &setlocal
for /f "delims=;" %%x in (Beispiel.txt) do call set "Optionen=%%Optionen%%%%x"
echo %Optionen%
pause
Grüße
rubberman