truespin
Goto Top

ListBox in einer Batchdatei

Hallo zusammen,

Auf anraten eines interessierten Lesers hier der neue Beitrag^^

Man kann in einem Batchfile auch VB-Skripte verwenden, was ich jetzt auch brauche.
Leider weiß ich nicht wie ich eine ListBox wie in VB erstelle und den User eine Auswahl gebe. Ich habe jetzt schon einige Zeit gesucht und das einzige was ich gefunden habe war das hier: http://lab1.de/Central/Software/System-To ...
Leider hilft mir das nicht wirklich weiter.

Ich brauche also ein Auswahlfenster wo ich bis zu sieben Auswahlmöglichkeiten bite. Das entscheidende ist, dass nicht immer alle dieser Auswahlmöglichkeiten erscheinen soll. Welche Möglichkeiten es gibt hängt vom vorherigen Programmablauf ab.

Nun brauche ich eben eine ListBox mit der ich bis zu sieben Auswahlmöglichkeiten aus einem *.txt file auswählen kann. Es ist aber durchaus möglich das in diesem *.txt file nur zwei, drei, vier,... Auswahlmöglichkeiten stehen.

Ich würde mich wieder über eure Hilfe freuen!


truespin

Content-Key: 88464

Url: https://administrator.de/contentid/88464

Printed on: April 25, 2024 at 05:04 o'clock

Member: bastla
bastla May 26, 2008 at 12:57:44 (UTC)
Goto Top
Hallo truespin!

Mit der Auswahl ist es ja nicht getan - wie soll's denn dann weitergehen, was passiert mit dem Ergebnis?

Grüße
bastla
Member: truespin
truespin May 26, 2008 at 13:05:12 (UTC)
Goto Top
Hallo,
das Ergebnis wir in einer Variable abgelegt und daraufhin wird in Subversion ein neuer Ordner erstellt.

Die Auswahl stellt Ordner dar die bereits im angegebenen Arbeitsverzeichnis von Subversion angelegt sind. Nun soll meine Batchdatei herausfinden welche Ordner schon angelegt sind. Das funktioniert auch schon. Das nächste ist jetzt dem User eine Auswahl zu bieten welchen Ordner er als nächstes anlegen möchte. Da diese einer Struktur unterliegen können nur noch Ordner angelegt werden die in logischer Reihenfolge nach dem letzten bereits vorhandenen Ordern liegen. Heißt wenn Ordner 3 schon angelegt ist bekommt der User eine Auswahl von 4,5,6 und 7. Er wählt einen aus, sagen wir 5. Nun wird in Subversion ein neuer Pfad angelegt welcher als letzten Ordnernamen die 5 enthält. Ich benötige nur die Auswahl! Den Rest habe ich schon, hoffe ich zumindest!^^
Da ich den User unserer Firma nicht die DOSBox als Eingabefenster bieten kann brauche ich eben diese ListBox.


truespin
Member: bastla
bastla May 26, 2008 at 13:33:01 (UTC)
Goto Top
Hallo truespin!

Da VBScript eigentlich keine GUI zu bieten hat, könnte das als Batch (eher unschön) so aussehen:
@echo off & setlocal
set "Menue=D:\Auswahl.txt"  

set C=%temp%\Ch.vbs
> %C% echo Menue = Split(CreateObject("Scripting.FilesystemObject").OpenTextFile(WScript.Arguments(0)).ReadAll,vbCrLF)  
>>%C% echo Anzahl = UBound(Menue) + 1
>>%C% echo Auswahl = "Bitte wählen Sie durch Eingabe der Nummer:" ^& vbCrLF  
>>%C% echo For i = 1 To Anzahl
>>%C% echo     Auswahl = Auswahl ^& vbCrLF ^& i ^& " " ^& Menue(i - 1)  
>>%C% echo Next
>>%C% echo Do
>>%C% echo     OK = False
>>%C% echo     Eingabe = InputBox(Auswahl, "Auswählen")  
>>%C% echo     If Eingabe = "" Then Eingabe = "0"  
>>%C% echo     If IsNumeric(Eingabe) Then
>>%C% echo         Eingabe = CInt(Eingabe)
>>%C% echo         If Eingabe ^<= Anzahl Then OK = True
>>%C% echo     End If
>>%C% echo Loop Until OK
>>%C% echo If Eingabe ^> 0 Then WScript.Echo Menue(Eingabe - 1)

for /f "delims=" %%i in ('cscript //nologo %C% "%Menue%"') do set "Wahl=%%i"  
if defined Wahl (echo Auswahl: %Wahl%) else (echo Keine Auswahl getroffen!)
Die Optionen werden der Datei "D:\Auswahl.txt" entnommen.

Grüße
bastla
Member: truespin
truespin May 27, 2008 at 04:59:05 (UTC)
Goto Top
Guten Morgen,
ich hätte da noch ein bis zwei Fragen:

1: was macht die Variable %temp%? In der steht doch garnichts drin, oder doch?
2: ^ ist das Escapezeichen in Batch richtig?

Jetzt muss ich mir das ganze nochmal ansehen, vielen Dank für deine Hilfe.
Soblad ich weiter weiß melde ich mich wieder!

truespin
Member: bastla
bastla May 27, 2008 at 05:13:29 (UTC)
Goto Top
Hallo truespin!

zu 1:
%temp% ist eine Systemvariable (für die weiteren einfach "set /?" in einer CMD-Shell eingeben) und enthält den Pfad zum usereigenen Temp-Ordner (von dem Du einigermaßen gesichert annehmen kannst, dass der Benutzer dort Schreibrechte hat).

zu 2:
Exakt; nur so lassen sich ansonsten als Steuerzeichen interpretierte Zeichen wie "<|>&" per "echo" ausgeben.

Noch zum Script: Wenn Du Dir jeweils ">>%C% echo " wegdenkst, kannst Du das VBScript aus dem Batch "herauslesen", aber einfacher ist es, in einem Editor die "%temp%\Ch.vbs" (durch Eingabe des vollständigen Pfades beim Öffnen) anzusehen (natürlich erst, nachdem der Batch einmal ausgeführt wurde).

Grüße
bastla
Member: truespin
truespin May 27, 2008 at 07:22:52 (UTC)
Goto Top
Hallo,
ich habe das ganze jetzt mal getestet. Mit dem %temp% funktioniert das ganze bei mir nicht. Wenn ich dafür einen anderen Pfad verwende funktioniert das ganze aber!

Hier ist mein bisheriger Code, nicht viel ich weiß:

@echo off

d:
set svn=D:\tools\svn-win32-1.4.5\bin\svn.exe

%svn% list https://subversion/svn/training/TE-G2/P_00X_XYZ/Q_APPL_CUSTOMER/r01/MAIN/tags/L_01_C01 > D:\tools\svn-win32-1.4.5\bin\log\list.txt


find "but/" D:\tools\svn-win32-1.4.5\bin\log\list.txt && set var=but/ && goto :GEFUNDEN  
goto :FIND_SUT

:FIND_SUT
find "sut/" D:\tools\svn-win32-1.4.5\bin\log\list.txt && set var=sut/ && goto :GEFUNDEN   
goto :FIND_SWC

:FIND_SWC
find "swc/" D:\tools\svn-win32-1.4.5\bin\log\list.txt && set var=swc && goto :GEFUNDEN  
goto :FIND_SWI

:FIND_SWI
find "swi/" D:\tools\svn-win32-1.4.5\bin\log\list.txt && set var=swi/ && goto :GEFUNDEN  
goto :FIND_SWT

:FIND_SWT
find "swt/" D:\tools\svn-win32-1.4.5\bin\log\list.txt && set var=swt/ && goto :GEFUNDEN  
goto :FIND_SYI

:FIND_SYI
find "syi/" D:\tools\svn-win32-1.4.5\bin\log\list.txt && set var=syi/ && goto :GEFUNDEN  
goto :FIND_SYT

:FIND_SYT
find "syt/" D:\tools\svn-win32-1.4.5\bin\log\list.txt && set var=swt/ && goto :GEFUNDEN  
goto :ERRORLEVEL1

goto :ENDE

:GEFUNDEN
@echo label %var% wurde gefunden!


if %var% == but/ (

	@echo passt but/ 
         
if %var% == sut/ (
	
	@echo passt sut/
	%svn% copy https://subversion/svn/training/TE-G2/P_00X_XYZ/Q_APPL_CUSTOMER/r01/MAIN/trunk https://subversion/svn/training/TE-G2/P_00X_XYZ/Q_APPL_CUSTOMER/r01/MAIN/tags/L_01_C01/but/ -m "Test" )  
	goto :ANGELEGT

if %var% == swc/ (
	
	@echo passt swc/ 
	%svn% copy https://subversion/svn/training/TE-G2/P_00X_XYZ/Q_APPL_CUSTOMER/r01/MAIN/trunk https://subversion/svn/training/TE-G2/P_00X_XYZ/Q_APPL_CUSTOMER/r01/MAIN/tags/L_01_C01/sut -m "Test" )  
	goto :ANGELEGT

if %var% == swi/ (

	@echo passt swi/ 
	%svn% copy https://subversion/svn/training/TE-G2/P_00X_XYZ/Q_APPL_CUSTOMER/r01/MAIN/trunk https://subversion/svn/training/TE-G2/P_00X_XYZ/Q_APPL_CUSTOMER/r01/MAIN/tags/L_01_C01/swc -m "Test" )  
	goto :ANGELEGT

if %var% == swt/ (

	@echo passt swt/ 
	%svn% copy https://subversion/svn/training/TE-G2/P_00X_XYZ/Q_APPL_CUSTOMER/r01/MAIN/trunk https://subversion/svn/training/TE-G2/P_00X_XYZ/Q_APPL_CUSTOMER/r01/MAIN/tags/L_01_C01/swi -m "Test" )  
	goto :ANGELEGT

 
if %var% == syi/ (

	@echo passt syi/ 
	%svn% copy https://subversion/svn/training/TE-G2/P_00X_XYZ/Q_APPL_CUSTOMER/r01/MAIN/trunk https://subversion/svn/training/TE-G2/P_00X_XYZ/Q_APPL_CUSTOMER/r01/MAIN/tags/L_01_C01/swt -m "Test" )  
	goto :ANGELEGT


if %var% == syt/ (

	@echo passt syt/ 
	%svn% copy https://subversion/svn/training/TE-G2/P_00X_XYZ/Q_APPL_CUSTOMER/r01/MAIN/trunk https://subversion/svn/training/TE-G2/P_00X_XYZ/Q_APPL_CUSTOMER/r01/MAIN/tags/L_01_C01/syi -m "Test" )  
	goto :ANGELEGT

goto :ENDE


:ANLAGE
@echo Ein neues Label mit der URL https://subversion/svn/training/TE-G2/P_00X_XYZ/Q_APPL_CUSTOMER/r01/MAIN/trunk https://subversion/svn/training/TE-G2/P_00X_XYZ/Q_APPL_CUSTOMER/r01/MAIN/tags/L_01_C01/%var% wurde angelegt!
goto :ENDE


:ERRORLEVEL1
@echo errorlevel1: Es wurde kein Lable gefunden!!!
call "D:\tools\svn-win32-1.4.5\bin\log\beep.bat"  

:ENDE

pause
 



Bis jetzt habe ich das ganze ohne Userabfrage gemacht. Heißt wenn Lable sut/ vorhanden war habe ich einfach das nächste (also but/) angelet. Nun kommt dein Code ins Spiel. Nachdem ich festgestellt habe welches das letzte Lable war möchte ich dem User eine Auswahl bieten von allen Möglichkeiten die NACH dem letzten bereits vorhandenen Lable kommen. Das Lable but/ ist das letzte in der Reihe. Wenn also das Lable sut/ schon angelegt wurde muss ich nun nur noch but/ zur Auswahl bieten. Sollte swi/ das letzte bereits vorhandene Lable sein so muss ich swc/, sut/ und but/ zur Auswahl bieten. Wenn bereist das letzte Lable (also but/) angelegt ist, darf keine Auswahl möglich sein.

Ich hoffe jetzt kann man mein Problem besser verstehen.
Mittlerweile bin ich fast der Meinung das ganze wäre besser in C# oder VB zu realisierten.

Ich freue mich über konstruktive Kretik!


truespin