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
GELÖST

variable Variablen, Ordneraulistung, Menu, Option, variable Liste optimieren

Frage Entwicklung Batch & Shell

Mitglied: Phlegma

Phlegma (Level 1) - Jetzt verbinden

27.06.2007, aktualisiert 02.07.2007, 4868 Aufrufe, 13 Kommentare

jaja toller beitragstitel, trifft es aber nur zu gut...

hi, ich komme gleich zu meinem problem:

ich brauche Variablen (zahlen) in anderen Variablen bzw einen variablen Variablen Aufruf.

beispiel:
01.
@echo off 
02.
cls 
03.
set /a "count=1" 
04.
::    VERSION 
05.
      set version=0.0 
06.
 
07.
title DiscMenu - Phlegma - ver.%version% 
08.
 
09.
:: Das Menu liest den Ordnerinhalt aus, und erstellt dann Optionen zum anwählen. 
10.
for /f "delims=;" %%i in ('dir /b') do call :setprog "%%i" 
11.
set /a "count-=1" 
12.
echo. 
13.
echo. 
14.
echo  Hi, du hast grade eine CD oder DVD von mir eingeschoben, 
15.
echo  jetzt kannst du ausw„hlen welches Programm du installieren m”chtest! 
16.
echo. 
17.
echo  Anzahl der gefunden Programme: %count% 
18.
echo. 
19.
if %count% EQU 0 goto end 
20.
if %count% GEQ 1 echo  1: %prog1% 
21.
if %count% GEQ 2 echo  2: %prog2% 
22.
if %count% GEQ 3 echo  3: %prog3% 
23.
if %count% GEQ 4 echo  4: %prog4% 
24.
if %count% GEQ 5 echo  5: %prog5% 
25.
if %count% GEQ 6 echo  6: %prog6% 
26.
if %count% GEQ 7 echo  7: %prog7% 
27.
if %count% GEQ 8 echo  8: %prog8% 
28.
if %count% GEQ 9 echo  9: %prog9% 
29.
if %count% GEQ 10 echo  10: %prog10% 
30.
if %count% GEQ 11 echo  11: %prog11% 
31.
if %count% GEQ 12 echo  12: %prog12% 
32.
echo. 
33.
set /p choice= Gib die Zahl deines Programms ein:  
34.
echo 
35.
 
36.
::hier is grade baustelle.... 
37.
for /f %%c in (1 2 3 4 5 6 7 8 9 10 11 12) do if %choice% EQU %%c start %prog%%c% 
38.
 
39.
pause>nul 
40.
goto :eof 
41.
 
42.
 
43.
 
44.
 
45.
:setprog 
46.
echo zeile=%1 
47.
set "prog%count%=%~1" 
48.
::echo %prog1%,%prog2%,%prog3% 
49.
set /a "count+=1" 
50.
goto :eof
vorher habe ich die programme ausgelesen per dir befehl, das speicher ist jah möglich set "prog%count%=xxx"
aber das aufrufen nicht...

oder kenne ich den befehl nur nicht?
ich weiß leider auch nicht wie ich richtig danach suchen soll... "variable variabalen" liefert nichts anständiges...

bitte um hilfe,
Ph
Mitglied: bastla
27.06.2007 um 18:28 Uhr
Hallo Phlegma!

Sollte eigentlich so klappen ...
01.
@echo off & setlocal enabledelayedexpansion 
02.
... 
03.
... 
04.
for /f %%c in (1 2 3 4 5 6 7 8 9 10 11 12) do if %choice% EQU %%c start !prog%%c! 
05.
...
Um das Ganze etwas variabler zu machen, könntest Du auch etwa so vorgehen:
01.
@echo off & setlocal enabledelayedexpansion 
02.
... 
03.
... 
04.
if %count% EQU 0 goto end 
05.
for /l %%n in (1,1,%count%) do echo %%n:!prog%%n! 
06.
echo. 
07.
set /p choice= Gib die Zahl deines Programms ein: 
08.
echo. 
09.
set /a Nr=%choice% 
10.
if %Nr% leq 0 goto :Fehler 
11.
if %Nr% gtr %count% goto :Fehler 
12.
start "Fenstertitel" "!prog%Nr%!" 
13.
goto :Weiter
Um ":Fehler" und :Weiter" musst Du Dich selbst kümmern ...

Grüße
bastla
Bitte warten ..
Mitglied: Phlegma
27.06.2007 um 19:41 Uhr
cool

versteh ich das richtig dass dann in !prog%var%! das var zuerst umgesetzt wird in die benötigte zahl und dann erst die gesamtvariable..?

ich seh diese enabledelayedexpansions nicht zum ersten mal, aber ich versteh nicht ganz wo jez der unterschied mit oder ohne liegt.. ich glaub ich hab das auch shconmal gefragt.. wieso arbeitet man nicht immer mit dieser erweiterung?

kann ich so auch den oberen teil verbessern? die liste mit den programmen...? ich editier den oberen post dass man mal die ganze batch sieht...

edit: ah stimmt die liste mit den programmen hast du auch schon verbessert *gg ...
wie stehts mit meiner suchschleife? ist die ok?
Bitte warten ..
Mitglied: bastla
27.06.2007 um 20:49 Uhr
Hallo Phlegma!

Im Prinzip war das schon OK, nur die Zählvariable sollte bei 0 beginnen, damit auch der (theoretische) Fall "Kein Programm gefunden" abgedeckt wird. Außerdem ersparst Du Dir dann auch das "set /a count-=1".

Warum verwendest Du eigentlich "delims=;"? Wenn's keinen besonderen Grund dafür gibt, müsste "delims=" reichen, um auch Programmnamen mit Leerstellen "am Stück" zu erhalten.

Da ich annehme, dass diese Batchdatei selbst nicht auch als Programm aufgelistet werden soll, würde ich noch eine entsprechende Überprüfung vor dem Aufruf von ":setprog" vorschlagen.

Die nächste Version könnte dann so aussehen:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set /a count=0 
03.
::    VERSION 
04.
      set version=0.0 
05.
 
06.
title DiscMenu - Phlegma - ver.%version% 
07.
 
08.
:: Das Menu liest den Ordnerinhalt aus, und erstellt dann Optionen zum Anwählen. 
09.
for /f "delims=;" %%i in ('dir /b') do if "%%i" neq "%~nx0" call :setprog "%%i" 
10.
if %count% EQU 0 goto end 
11.
cls 
12.
echo. 
13.
echo. 
14.
echo  Hi, du hast grade eine CD oder DVD von mir eingeschoben, 
15.
echo  jetzt kannst du ausw„hlen, welches Programm du installieren m”chtest! 
16.
echo. 
17.
echo  Anzahl der gefunden Programme: %count% 
18.
:Menue 
19.
echo. 
20.
for /l %%n in (1,1,%count%) do echo %%n:!prog%%n! 
21.
echo. 
22.
echo 0:Ende 
23.
echo. 
24.
echo. 
25.
set /p choice= Gib die Zahl deines Programms ein: 
26.
echo. 
27.
set /a Nr=%choice% 
28.
if %Nr% equ 0 goto :Ende 
29.
if %Nr% lss 0 goto :Fehler 
30.
if %Nr% gtr %count% goto :Fehler 
31.
start "Fenstertitel" "!prog%Nr%!" 
32.
cls 
33.
goto :Menue 
34.
 
35.
:setprog 
36.
set /a count+=1 
37.
set "prog%count%=%~1" 
38.
goto :eof
Offen bleiben noch die Fehlerbehandlung und eine ev Verabschiedung (bei ":Ende") sowie die Anpassung der Versionsnummer .

Grüße
bastla

[Edit] @Biber: Danke, auch für die Ergänzungen zum Thema "delayedexpansion" (war bei mir leider auf der Strecke geblieben ...) [/Edit]
Bitte warten ..
Mitglied: Biber
27.06.2007 um 21:29 Uhr
Moin Phlegma, moin bastla,

was soll ich noch großartig an bastlas Lösungsansätzen verbessern wollen?

Aber um Dir, Phlegma, noch einmal näherzubringen, dass man/frau sich nur Sachen wünschen sollte, wenn sich auch die Nebenwirkungen der Wunscherfüllung klar abschätzen lassen...

...natürlich geht es ohne "DelayedExpansion", haben wir ja früher auch so gemacht... vor der Währungsreform...

Einfacher zu lesen (oder zu schreiben) wird es dadurch allerdings nur bedingt.

Eine Variation von bastlas Schnipsel ohne "verzögerte Variablenauflösung" folgt...
01.
::--------snipp DiscMenu-BiberVariante.bat 
02.
@echo off & setlocal <b>disableDelayedExpansion</b> 
03.
set /a count=0 
04.
::    VERSION 
05.
      set version=0.0 
06.
 
07.
title DiscMenu - Phlegma - ver.%version% 
08.
 
09.
:: Das Menu liest den Ordnerinhalt aus, und erstellt dann Optionen zum Anwählen. 
10.
for /f "delims=;" %%i in ('dir /b ') do if "%%i" neq "%~nx0" call :setprog "%%i" 
11.
if %count% EQU 0 goto end 
12.
cls 
13.
echo. 
14.
echo. 
15.
echo  <b>Moin,</b> du hast grade eine CD oder DVD von mir eingeschoben, 
16.
echo  jetzt kannst du auswählen, welches Programm du installieren möchtest! 
17.
echo. 
18.
echo  Anzahl der gefundenen Programme: %count% 
19.
:Menue 
20.
echo. 
21.
for /l %%n in (1,1,%count%) do <b>call echo %%n:%%prog%%n%%</b> 
22.
echo. 
23.
echo 0:Ende 
24.
echo. 
25.
echo. 
26.
set /p choice= Gib die Zahl deines Programms ein: 
27.
echo. 
28.
set /a Nr=%choice% 
29.
if %Nr% equ 0 goto :Ende 
30.
if %Nr% lss 0 goto :Fehler 
31.
if %Nr% gtr %count% goto :Fehler 
32.
<b>call ECHO start "Fenstertitel" "%%prog%Nr%%%"</b> 
33.
<b>pause</b> 
34.
cls 
35.
goto :Menue 
36.
 
37.
:setprog 
38.
set /a count+=1 
39.
set "prog%count%=%~1" 
40.
goto :eof 
41.
::--------snapp DiscMenu-BiberVariante.bat
Wie bei mir üblich, ist das "ECHO" nur zum Testen drin..

Sagen wir so - wenn ich die Wahl hätte, würde ich auf die (trotz alledem) lesbarere EnableDelayedExpansion-Variante umsteigen...
...die von mir vorgeturnte Variante mit x-mal %-Zeichen drumherumwickeln ist nerviger.
Und fehlerträchtiger.

Grüße
Biber
Bitte warten ..
Mitglied: Phlegma
27.06.2007 um 22:12 Uhr
schöön! vielen dank ihr beiden!

aba nicht dass ich jez zufrieden wäre .. hehe

ich hätte gerne noch die auflistung verbessert, dh man soll auchnoch die einleitung und die obersten programme lesen können bzw zuerst die obersten, genau genommen möchte ich bei vielen programmen mehrere "seiten" die sich auch dann über die frage des programms aufrufen lassen. also außer den ganzen zahlen noch die beiden möglichkeiten "nächste" bzw "n" (oO vorige wäre auch noch cool aber ich glaub das is zuviel verlangt... aber am ende zurück zu den ersten...

dafür brauche ich wieder euch, da ich jah nichmal auf die vorigen sachen selbst gekommen bin... ;D

nochmals vielen dank, Ph
Bitte warten ..
Mitglied: Biber
27.06.2007 um 22:40 Uhr
Moin Phlegma,

kennst Du die alte Forumsweisheit "Neue Frage, neuer Beitrag"?
Ist ähnlich universell wie meine Lieblings-Bauernregel "April vorbei - Anfang Mai"...

Abgesehen davon - statt irgendeiner Vor-/Zurück-Blätterei mit Tasteneingabe "v" und "z"...*grusel*
...das sieht ja echt aus wie aus der Zeit vor Erfindung der Alufolie....

Mach doch stattdessen lieber den Bildschirm zwei Meter lang mit "mode con lines=300".
Bzw. statt "300" den Wert von %count%+10.

Das hast Du alles und bekommst es auch ohne Hilfe hin.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
27.06.2007 um 23:56 Uhr
... und damit es ein paar Zentimeter weniger werden:
01.
@echo off & setlocal enabledelayedexpansion 
02.
::    VERSION 
03.
      set version=0.0 
04.
 
05.
title DiscMenu - Phlegma - ver. %version% 
06.
 
07.
set /a count=0 
08.
for /f "delims=;" %%i in ('dir /b /a-d') do if "%%i" neq "%~nx0" call :setprog "%%i" 
09.
if %count% EQU 0 goto :eof 
10.
 
11.
set /a Zeilen=(%count%+2)/3 
12.
call :MenueText 
13.
mode con lines=(%Zeilen%+5) 
14.
 
15.
cls 
16.
echo. 
17.
echo. 
18.
echo   Hi, Du hast grade eine CD oder DVD von mir eingeschoben, 
19.
echo   jetzt kannst Du ausw„hlen, welches Programm Du installieren m”chtest! 
20.
echo. 
21.
echo   Anzahl der gefunden Programme: %count% 
22.
echo. 
23.
echo. 
24.
echo   Weiter mit einer beliebigen Taste zur Programmauswahl ... 
25.
pause>nul 
26.
 
27.
:Menue 
28.
cls 
29.
for /l %%n in (1,1,%Zeilen%) do echo!MZeile%%n! 
30.
echo. 
31.
echo. 
32.
set /p choice=  Gib die Nummer Deines Programms ein (0 fr Ende):  
33.
set /a Nr=-1 
34.
set /a Nr=%choice% 2>nul 
35.
if %Nr% equ 0 goto :Ende 
36.
if %Nr% lss 0 goto :Fehler 
37.
if %Nr% gtr %count% goto :Fehler 
38.
start "Fenstertitel" "!prog%Nr%!" 
39.
goto :Menue 
40.
 
41.
:setprog 
42.
set /a "count+=1" 
43.
set "prog%count%=%~1" 
44.
goto :eof 
45.
 
46.
:MenueText 
47.
for /l %%m in (1,1,%Zeilen%) do ( 
48.
	set "MZeile%%m=." 
49.
	set /a Nr=%%m 
50.
	if !Nr! leq %count% set MZeile%%m= 
51.
	if !Nr! leq %count% call :ProcessEntryForLine %%m 
52.
	set /a Nr+=%Zeilen% 
53.
	if !Nr! leq %count% call :ProcessEntryForLine %%m 
54.
	set /a Nr+=%Zeilen% 
55.
	if !Nr! leq %count% call :ProcessEntryForLine %%m 
56.
57.
goto :eof 
58.
 
59.
:ProcessEntryForLine 
60.
set "NrForm=   %Nr%" 
61.
set "ProgForm=!prog%Nr%!                    " 
62.
set "MZeile%1=!MZeile%1!%NrForm:~-4%: %ProgForm:~0,19% " 
63.
goto :eof 
64.
 
65.
:Fehler 
66.
echo. 
67.
echo. 
68.
echo   Ungltige Auswahl - bitte Taste drcken und erneut versuchen... 
69.
pause>nul 
70.
goto :Menue 
71.
 
72.
:Ende 
73.
cls 
74.
echo. 
75.
echo   CD/DVD nicht im Laufwerk vergessen! 
76.
echo. 
77.
echo. 
78.
echo   Bitte noch einen letzten Tastendruck ... 
79.
pause>nul
Grüße
bastla

P.S.: @Biber - Ja, ich weiß ...
Bitte warten ..
Mitglied: Biber
28.06.2007 um 08:05 Uhr
@bastla
P.S.: @Biber - Ja, ich weiß ...
Na guuuuuut, dann sag gar nicht erst was dazu....

Grüße
Biber
Bitte warten ..
Mitglied: Phlegma
28.06.2007 um 14:23 Uhr
hmmm ok zuerst
@Biber nö wieso ist noch das selbe thema geht um die selbe batch..... jah ok... vllt nächstes mal
and die mode sach hatte ich auch gedacht... aber wasnn wenn ich eine DVD mit 50 progs drauf brenne? dann simma wirklich bei den 2 metern und das ding ist unhandlich...

@bastla
schöön ... aber durchsteigen tu ich nit...
ich weiß dass die erklärung ma wieder 3 mal so lang wird, dennoch bitte ich darum.
es sind zu viele variablen und verschachtelung als dass ich das auf anhieb verstehen könnte...
Bitte warten ..
Mitglied: bastla
28.06.2007 um 15:16 Uhr
Hallo Phlegma!

2 Meter wird auch die Erklärung nicht brauchen, und außerdem: Du wolltest es ja so.

01.
set /a Zeilen=(%count%+2)/3
Da ich die Ausgabe in 3 Spalten anordne, muss ich feststellen, wie viele Menü-Zeilen ich brauchen werde. Die Berechnung führt eigentlich ein "Aufrunden" durch (die Division alleine rundet nämlich ab).
01.
mode con lines=(%Zeilen%+5)
Entspricht Biber's Vorschlag, genügend Zeilen im CMD-Fenster zur Verfügung zu stellen (bei Bedarf kann nach oben gescrollt werden).

Im Unterprogramm ":MenueText" werden die Menüzeilen erstellt und in Variable gespeichert - vergleichbar mit dem vorherigen Speichern der Programme.
01.
for /l %%m in (1,1,%Zeilen%) do (
Ich weiß schon, wie viele Zeilen es werden sollen, daher eine Zählschleife ...
01.
set "MZeile%%m=." 
02.
... 
03.
if !Nr! leq %count% set MZeile%%m=
ist eigentlich nicht nötig. In einer ersten Version hatte ich die Zeilenzahl fix mit 20 vorgegeben (damit hätte auch das "Standard"-CMD-Fester gereicht) - die erste Zeile hätte beim späteren "echo" dafür gesorgt, dass eine Leerzeile ausgegeben wird, wenn nicht genug Programme aufzulisten gewesen wären (kannst Du probieren, indem Du vor der Schleife ein "set /a Zeilen=20" einfügst und nur wenige Programme verwendest). Die zweite Zeile hätte den Punkt wieder gelöscht, wenn es doch keine Leerzeile werden sollte.

01.
set /a Nr=%%m
Da ich mit der Zeilennummer noch rechnen muss, wird diese in eine numerische Variable (Eintrags-Nummer) übernommen.
01.
if !Nr! leq %count% call :ProcessEntryForLine %%m 
02.
set /a Nr+=%Zeilen% 
03.
if !Nr! leq %count% call :ProcessEntryForLine %%m 
04.
set /a Nr+=%Zeilen% 
05.
if !Nr! leq %count% call :ProcessEntryForLine %%m
Für jede Spalte wird (wenn es noch Programmdaten gibt, festzustellen durch den Vergleich Eintrags-Nummer <= Programmanzahl) im Unterprogramm ":ProcessEntryForLine" ein Eintrag erzeugt, wobei sich die Eintrags-Nummer immer um die Zeilenzahl erhöhen muss.
Beispiel: Bei 16 Einträgen müssen 6 Zeilen erzeugt werden (siehe Formel oben), wobei in der ersten Spalte die Programme 1 bis 6 stehen, daneben 7 bis 12 - also jeweils um 6 (= Zeilenanzahl) mehr - und in der letzten Spalte 13 bis 16 (wieder um 6 mehr als in der Spalte davor).
Da diese Aufrufe alle in der Schleife erfolgen, muss mit "delayedexpansion" die jeweils aktuelle Eintrags-Nummer !Nr! gelesen werden. Würde ich %Nr% schreiben, wäre das Ergebnis immer 0 (weil nur beim Beginn der Schleife einmal der Wert von %Nr% ermittelt würde, und es da diese Variable noch nicht einmal gab).

Das Unterprogramm ":ProcessEntryForLine" hat eigentlich nur die Aufgabe, die Einträge zu formatieren und zu einer Zeile zusammenzufügen.
01.
set "NrForm=   %Nr%" 
02.
set "ProgForm=!prog%Nr%!                    " 
03.
set "MZeile%1=!MZeile%1!%NrForm:~-4%: %ProgForm:~0,19% "
Zuerst werden vor die Nummer Leerstellen platziert (und nachher auf 4 Stellen rechtsbündig "zurechtgeschnitten") und an den Programmnamen ausreichend Leerstellen angehängt. Beim Zusammenfügen wird an den schon vorhandenen Teil der Zeile (bei der dritten Spalte etwa befinden sich schon die Einträge der ersten beiden Spalten in !MZeile%1!) der neue Eintrag angefügt, wobei durch die Längenangaben für Nummer (letzte 4 Stellen) und Text (erste 19 Stellen) für ein ordentliches Untereinanderschreiben gesorgt wird.
Zu !MZeile%1!: Da beim Aufruf des Unterprogramms die Zeilennummer als Parameter mitgegeben wurde, steht sie hier als %1 zur Verfügung.

Die Ausgabe des Menüs erfolgt einfach mit einer weiteren Zählschleife:
01.
for /l %%n in (1,1,%Zeilen%) do echo!MZeile%%n!
Gleiches Prinzip, nur dass eben hier direkt die Schleifenvariable %%n verwendet wird.

Um einem irrtümlichen Drücken der Eingabetaste vorzubeugen, wird %Nr% zunächst auf -1 gesetzt. Wenn %choice% leer bleibt, kann wegen des Fehlers (deshalb hier auch 2>nul) keine neue %Nr% (diese Variable hätte ich vielleicht besser %ANr% nennen sollen, da sie mit der anderen Variable %Nr% in :MenueText genau nichts zu tun hat) "berechnet" werden und mit der nachfolgenden Abfrage auf lss 0 wird der Fehler abgefangen. Wird allerdings ein Text eingegeben, so ergibt sich daraus eine %Nr% mit Wert 0 und das Programm wird beendet - hier ließe sich noch nachbessern, etwa mit: if %Nr% equ 0 if "%choice:~0,1%" neq "0" goto :Fehler

Sollten noch Fragen offen geblieben sein - Du weißt, wo Du mich findest ...

Grüße
bastla

P.S.: Ich finde es gut, dass Du überhaupt fragst ...
Bitte warten ..
Mitglied: Phlegma
29.06.2007 um 15:29 Uhr
schön! danke ich versteh jez so gut wie alles vielen dank nochmal.

ich habe noch ein paar sachen hinzugefügt ich poste demnächst meine final. daher bitte noch nicht closen.
Bitte warten ..
Mitglied: Phlegma
02.07.2007 um 22:12 Uhr
hier nun meine vorläufige endversion:

01.
@echo off 
02.
goto :begin 
03.
---------------------------------------------------------------------------------------------------- 
04.
README DISCMENU BY PHLEGMA 
05.
 
06.
Hi,  
07.
 
08.
beiliegend zu dieser Readme findest du ein Programm oder eine Batch, 
09.
die einen beliebigen CD/DVD (oder Ordner) Inhalt auflisten und starten kann. 
10.
 
11.
Allerdings muss dafür alles richtig konfiguriert werden! 
12.
 
13.
der Inhalt muss folgende Kriterien erfüllen: 
14.
1. der Name des Ordners oder Programms darf nicht länger als 19 Stellen lang sein 
15.
2. die Exe des Programms im Ordner muss genauso wie der Ordner selbst heißen (nur mit .exe am Ende) 
16.
   sonst kann die Exe nicht richtig gestartet werden. 
17.
 2a) ansonsten kann eine Batch mit dem Ordnernamen gestartet werden (mit .bat am Ende) 
18.
     Hinweis: batch kann den parameter %1 verwerden um den Ort anzugeben an dem sie sich befindet 
19.
3. dem Programm kann/sollte im Ordner eine Infodatei beigelegt werden 
20.
   3a) Format: info-"programmname".txt (nicht vergessen: programmname=ordnername) 
21.
4. Nichtzulistende Dateien sollten in einen Ordner namens extra verschoben werden. 
22.
 
23.
Info: Die Dateien readme, discmenu und autorun.inf werden nicht gelistet. 
24.
 
25.
 
26.
 
27.
@Phlegma 2007 
28.
---------------------------------------------------------------------------------------------------- 
29.
readme.txt 
30.
---------------------------------------------------------------------------------------------------- 
31.
:begin 
32.
setlocal enabledelayedexpansion 
33.
::    VERSION 
34.
      set version=1.0 
35.
 
36.
title DiscMenu - Phlegma - ver. %version% 
37.
 
38.
set /a count=0 
39.
for /f "delims=;" %%i in ('dir /b') do if "%%i" neq "%~nx0" if not "%%i"=="readme.txt" if not "%%i"=="autorun.inf" if not "%%i"=="extra" call :setprog "%%i" 
40.
if %count% EQU 0 goto :eof 
41.
 
42.
set /a Zeilen=(%count%+2)/3 
43.
call :MenueText 
44.
mode con lines=(%Zeilen%+5) 
45.
 
46.
cls 
47.
echo. 
48.
echo. 
49.
echo   Hi, Du hast grade eine CD oder DVD von mir eingeschoben, 
50.
echo   jetzt kannst Du ausw„hlen, welches Programm Du installieren m”chtest^! 
51.
echo. 
52.
echo   Anzahl der gefunden Programme: %count% 
53.
echo. 
54.
echo. 
55.
echo   Weiter mit einer beliebigen Taste zur Programmauswahl ... 
56.
pause>nul 
57.
 
58.
:Menue 
59.
cls 
60.
echo. 
61.
for /l %%n in (1,1,%Zeilen%) do echo!MZeile%%n! 
62.
echo. 
63.
echo. 
64.
set /p choice=  Gib die Nummer Deines Programms ein (0 fr Ende):  
65.
set /a ANr=-1 
66.
set /a ANr=%choice% 2>nul 
67.
if %ANr% equ 0 goto :Ende 
68.
if %ANr% lss 0 goto :Fehler 
69.
if %ANr% gtr %count% goto :Fehler 
70.
goto :startprog 
71.
::start "Fenstertitel" "!prog%Nr%!" 
72.
::goto :Menue 
73.
 
74.
:setprog 
75.
set /a "count+=1" 
76.
set "prog%count%=%~1" 
77.
goto :eof 
78.
 
79.
:MenueText 
80.
for /l %%m in (1,1,%Zeilen%) do ( 
81.
    set "MZeile%%m=." 
82.
    set /a Nr=%%m 
83.
    if !Nr! leq %count% set MZeile%%m= 
84.
    if !Nr! leq %count% call :ProcessEntryForLine %%m 
85.
    set /a Nr+=%Zeilen% 
86.
    if !Nr! leq %count% call :ProcessEntryForLine %%m 
87.
    set /a Nr+=%Zeilen% 
88.
    if !Nr! leq %count% call :ProcessEntryForLine %%m 
89.
90.
goto :eof 
91.
 
92.
:ProcessEntryForLine 
93.
set "NrForm=   %Nr%" 
94.
set "ProgForm=!prog%Nr%!                    " 
95.
set "MZeile%1=!MZeile%1!%NrForm:~-4%: %ProgForm:~0,19% " 
96.
goto :eof 
97.
 
98.
:Fehler 
99.
echo. 
100.
echo. 
101.
echo   Ungltige Auswahl - bitte Taste drcken und erneut versuchen... 
102.
pause>nul 
103.
goto :Menue 
104.
 
105.
:startprog 
106.
cls 
107.
echo. 
108.
echo  Programm !prog%ANr%! gew„hlt. 
109.
echo. 
110.
echo    Optionen: 
111.
echo. 
112.
set "proggy=!prog%ANr%!" 
113.
if "%proggy:~-3%"=="exe"  echo ^(s^)tart - ProgrammExe auf der CD/DVD direkt starten 
114.
if exist "%proggy%\info-%proggy%.txt" echo  ^(i^)nfo   - Infodatei des Programms aufrufen 
115.
echo. 
116.
if exist "%proggy%\%proggy%.exe" (echo  ^(s^)tart  - Programm/Installation starten) 
117.
echo. 
118.
if exist "%proggy%\%proggy%.bat" (echo  ^(s^)tart  - Programm/Extension starten 
119.
                                  echo    mehr Informationen sollten beim Aufruf oder bei info stehen.) 
120.
echo. 
121.
echo. 
122.
if not "%proggy:~-3%"=="exe" (if not exist "%proggy%\%proggy%.exe" echo  --- ProgrammExe nicht verfgbar ) 
123.
echo. 
124.
echo. 
125.
echo. 
126.
echo  ^(z^)urck - zurck zur Programmauswahl 
127.
echo. 
128.
set /p startprog=  W„hle:  
129.
if "%startprog%"=="" goto :startprog 
130.
if "%startprog%"=="start" if "%proggy:~-3%"=="exe" start %proggy% & goto :ende 
131.
if "%startprog%"=="s" if "%proggy:~-3%"=="exe" start %proggy% & goto :ende 
132.
if "%startprog%"=="start" if exist "%proggy%\%proggy%.exe" start "Programm" "%proggy%\%proggy%.exe" & goto :ende 
133.
if "%startprog%"=="s" if exist "%proggy%\%proggy%.exe" start "Programm" "%proggy%\%proggy%.exe" & goto :ende 
134.
if "%startprog%"=="start" if exist "%proggy%\%proggy%.bat" start cmd /c ("%proggy%\%proggy%.bat") & goto :ende 
135.
if "%startprog%"=="s" if exist "%proggy%\%proggy%.bat" start cmd /c ("%proggy%\%proggy%.bat" "%~dp0%proggy%") & goto :ende 
136.
if "%startprog%"=="info" start "Info" "%proggy%\info-%proggy%.txt" & goto :startprog 
137.
if "%startprog%"=="i" start "Info" "%proggy%\info-%proggy%.txt" & goto :startprog 
138.
if "%startprog%"=="zurck" goto Menue 
139.
if "%startprog%"=="z" goto Menue 
140.
echo  Fehler / falsche Eingabe 
141.
pause>nul 
142.
:Ende 
143.
cls 
144.
echo. 
145.
echo   Fertig! Programm wird in 5 Sekunden beendet. 
146.
echo. 
147.
echo. 
148.
ping -n 5 127.0.0.1 >nul 2>nul 
149.
 
150.
 
151.
:: @ Phlegma 2007                                             thx to bastla & biber @ www.administrator.de 
152.
 
153.
::”„á ™Žš õ 
154.
::öäüß ÖÄÜ §
danke thema kann geschlossen werden.

wer einen fehler entdeckt bitte mitteilung an mich schicken :D

grüße, Ph
Bitte warten ..
Mitglied: Biber
02.07.2007 um 22:23 Uhr
Ebenfalls THX, Phlegma,

habe den Thread (erstmal *gg) wie gewünscht geschlossen.

Schönen Abend
Biber
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
JavaScript
AngularJS Variable über Input in Funktion ausführen

Frage von badkilla zum Thema JavaScript ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Batch & Shell
gelöst Selected Gridview Value in Variable schreiben (4)

Frage von reissaus73 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 (14)

Frage von liquidbase zum Thema Windows Update ...

DSL, VDSL
Problem mit variernder Internetgeschwindigkeit (12)

Frage von schaurian zum Thema DSL, VDSL ...