BATCH: Unterverzeichnisse als Menue (dynamisch)

Hi ,

ich versuche mich krampfhaft im BATCH schreiben.
Ich brauche ein Auswahlmenue, welches ich mit

set /P meineAuswahl=Bitte Auswaehlen:

erstelle.

Problem dabei … ich moechte, dass zur weiteren Verarbeitung aus einem definiertem Verzeichnis die darin enthaltenen Verzeichnisnamen als Menuepunkte erscheinen. Da es bei BATCH ja keine Arrays gibt weiss ich nicht , wie ich weiter vorgehen kann.

Die Ausgabe der Verzeichnisse habe ich mit:

for /F %%i in ('DIR %pfad%\ /a:d /b') do @echo %%i

geloest. Nur das hilft mir nicht weiter. Aussehen soll es spaeter so:

[1] Daten
[2] Prg
[3] Temp

Bitte Waehlen:

vereinfacht soll bei 2 „Prg“ ausgegeben werden.
Geht das ? Ein Menue Dynamisch erstellen?

Gruss

PK

Hallo,

muss es denn wirklich pure Eingabeaufforderung sein?
Bei www.jpsoft.com gibt es TCC/LE umsonst, das einen nennenswerten Batch-Sprachumfang mitbringt. Zumindest in meiner Vollversion werden auch Befehle zur Definition von Arrays angeboten…

Grüße, guidot

hi guidot

muss es denn wirklich pure Eingabeaufforderung sein?

das problem ist…
dass ich das im firmennetz umherschicken muss.
da sind .exe nicht erlaubt und koennen von den meisten nicht ausgefuehrt werden. ebensfalls .vbs ist bei vielen nicht moeglich. seltsamerweise haben unsere admins .bat vergessen. :smile:

somit bin ich leider auf batch angewiesen… :frowning:

es muss ja nicht nur bei mir laufen.

Gruss

Pixel

Hi ,

ich versuche mich krampfhaft im BATCH schreiben.
Ich brauche ein Auswahlmenue, welches ich mit

Entspann Dich wieder, Dir kann gehilfen werden :smile:

set /P meineAuswahl=Bitte Auswaehlen:

erstelle.

Problem dabei … ich moechte, dass zur weiteren Verarbeitung
aus einem definiertem Verzeichnis die darin enthaltenen
Verzeichnisnamen als Menuepunkte erscheinen. Da es bei BATCH
ja keine Arrays gibt weiss ich nicht , wie ich weiter vorgehen
kann.

Hemdsärmelig. Steinzeitlich. Nur ein völliger Vollidiot, oder ein Freak macht sowas mit einer Batch.

Aber gut. Gott sei Dank bin ich so ein Freak aus der Steinzeit, als es den ROM Basic Interpreter gerade nicht mehr und den Windows Script Hos gerade noch nicht gab :smile:

@echo off

rem read command line param and remove any quotes
set MyPath=%1
set myPath=%MyPath:"=%

rem if no command line parameter specified, use current directory as default
if „%MyPath%“ EQU „“ Set MyPath=%CD%

rem build the menu

BuildMenu

rem draw the menu
Call :smiley:rawMenu
rem error handling if empty or non-existent directory was spcified
If %MenuItemCounter% LSS 1 (Call :Error „No directories found to build a menu“) & (Goto End)
rem prompt the user to select
echo.
Set /P MenuSelection="Please select a menu item [1-%MenuItemCounter%]:

rem End selected?
If %MenuSelection% EQU 0 Goto End
rem Range cheking
If %MenuSelection% LSS 1 (Call :Error „Selection is not in range [1-%MenuItemCounter%] - please try again“) & (Goto BuildMenu)
If %MenuSelection% GTR %MenuItemCounter% (call :Error „Selection is not in range [1-%MenuItemCounter%] - please try again“) & (Goto BuildMenu)

rem Get the menu item by number
Call :Get1MenuItem %MenuSelection%
If „%MenuItem%“ EQU „“ (Call :Error „Inconsistent Menu“) & (Goto :End)
Echo You selected item: %MenuSelection% (directory: %MenuItem%)
Pause
Goto BuildMenu

DrawMenu

rem draw the menu
Set MenuItemCounter=0
cls
echo Menu: %MyPath%
echo.
for /F %%i in (‚DIR „%MyPath%“ /a:d /b‘) do Call :smiley:raw1MenuItem „%%i“
echo.
Echo [0] End this menu
Goto :EOF

Draw1MenuItem

rem draw menu items and set the maximum number of items (MenuItemCounter)
Set /A MenuItemCounter += 1
Set Item=%1
Set Item=%Item:"=%
Echo [%MenuItemCounter%] %Item%
Goto :EOF

Get1MenuItem

Set FindCounter=%1
Set MenuItem=
Set Counter=0
for /F %%i in (‚DIR „%MyPath%“ /a:d /b‘) do Call :Find1MenuItem „%%i“ %Counter%
Set MenuItem=%MenuItem:"=%
Goto :EOF

Find1MenuItem

Set /A Counter += 1
If %Counter% EQU %FindCounter% Set MenuItem=%1
Goto :EOF

Error

Set Message=%1
Set Message=%Message:"=%
echo.
echo Error: %Message%
echo.
Pause
Goto :EOF

End

Speichere das Teil als menu.bat, und rufe es auf entweder mit

menu

(nimmt das aktuelle Verzeichnis als Grundlage) oder mit

menu "

Das hab ich befürchtet, das Forum wandelt die Doppelpunkte am Zeilenanfang, die ein Sprunglabel bezeichnen, in eine vertikale blaue Linie um, und haut die Einrückungen weg. Sprunglabels werden mit Call oder Goto angesprungen, daran kannst Du sie leicht erkennen.

Du musst also ein wenig mehr tun als markieren, kopieren und einfügen :smile:

Armin.

Das hab ich befürchtet, das Forum wandelt die Doppelpunkte am
Zeilenanfang, die ein Sprunglabel bezeichnen, in eine
vertikale blaue Linie um, und haut die Einrückungen weg.

Hallo steinzeitlicher Armin :smile:),

benutze den Pre-Tag, wird unterhalb des Eingabefensters erläutert.

Gruß
Reinhard