okidoki
Goto Top

Dynamische Anzahl Zeilen (Variablen) aus txt in Inputbox nutzen

Nach langer Zeit mal wieder eine Frage ... die Zwischenzeit habe ich immer noch mit dem Auswerten der Kommentare aus diesem Forum verbracht - weil sie alle super hilfreich waren!

Jetzt zu meinem Problem:
Ich möchte gerne eine Liste auslesen, um mit einer Auswahl daraus ein Programm zu starten. Die Liste soll aber dynamisch sein und die Variablen in in einer Inputbox angezeigt werden.

Was ich schon habe:
Meine Liste wird ausgelesen und jede Zeile in eine Variable gepackt.
In einer Inputbox wird die Eingabe ausgewertet und weiter verarbeitet.

Was mir fehlt:
Die Variablen sollen innerhalb der Inputbox angezeigt werden (als Auswahl, aber dynamische Anzahl der Variablen)

Hier mein bisheriger Versuch:

for /f "tokens=1* delims=:" %%i in ('findstr /n "^" Test.txt') do set "Variable%%i=%%j"  

 >%temp%\msgbox.vbs ECHO WScript.Echo InputBox("Administration Textdateien" ^& vbCrLf ^& _  
>>%temp%\msgbox.vbs ECHO    (variable1) ^& vbCrLf ^& _
>>%temp%\msgbox.vbs ECHO    (variable2) ^& vbCrLf ^& _
>>%temp%\msgbox.vbs ECHO    (variable3) ^& vbCrLf ^& _
>>%temp%\msgbox.vbs ECHO    (variable1) ^& vbCrLf ^& _
>>%temp%\msgbox.vbs ECHO    "" ^& vbCrLf ^& _  
>>%temp%\msgbox.vbs ECHO "Zum Editieren Dateiname eingeben:",  _  
>>%temp%\msgbox.vbs ECHO "TEST", _  
>>%temp%\msgbox.vbs ECHO "")  
set "all-a="  
for /f "delims=" %%i in ('cscript //nologo %temp%\msgbox.vbs') do set "all-a=%%i"  
DEL "%temp%\msgbox.vbs"  
if defined all-a (GOTO :all-2) else (GOTO :all-3)

:all-2
:: Zeile auslesen
set LineNo=%all-a%
set "line="  
set /a LineNo-=1
for /f %%a in ('more/e +%LineNo% ^< .\inhalte\liste.txt') do (  
  if not defined line set "line=%%a"  
)
exit

:all-3
goto eof

Gruß OKIDOKI

Content-ID: 201428

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

Ausgedruckt am: 19.11.2024 um 17:11 Uhr

bastla
bastla 08.02.2013 aktualisiert um 00:31:25 Uhr
Goto Top
Hallo OKIDOKI!

Eigentlich ist aus meiner Sicht der VBS-Teil unnötig, da Du ja einfach mit
findstr /n "^" Test.txt
oder, wenn Du eine andere Darstellung der Nummern haben möchtest, mit
find /v /n "::"<Test.txt
die Liste bequem auch in Batch erzeugen kannst (etwas opulenter gab's das auch schon mal diesem Thread einen Ansatz erarbeitet ...

... anyhow: Wenn Du VBS verwenden willst, dann lies die Liste direkt im Script ein - (ungetestet und in der Sparvariante) etwa per
L = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0)).ReadAll, vbNewline)  
T = "Administration Textdateien"  
For i = 0 To UBound(L)
    T = T & vbNewLine & i + 1 & vbTab & L(i)
Next
WScript.Echo InputBox(T & vbNewLine & "Zum Editieren Dateinummer eingeben:", "TEST")  
Beim Aufruf des Scripts musst du dann die Datei als Parameter übergeben, also etwa:
for /f "delims=" %%i in ('cscript //nologo %temp%\msgbox.vbs Test.txt') do set "all-a=%%i"
Grüße
bastla
OKIDOKI
OKIDOKI 08.02.2013 aktualisiert um 17:37:30 Uhr
Goto Top
Hallo bastla,

vielen Dank schon mal für deine Hinweise. Ich denke, das habe ich von schon mal irgendwo gelesen, das Problem ist viel einfach als es dargestellt wird ... von mir face-wink

Die Thematik hatten wir schon mal, stimmt soweit. In diesem Fall ist es eigentlich nur schwierig für mich, die Datei als Variable in das vbs-Script zu laden. Mir ist nämlich nicht klar, wie dort die Variable definiert wird, es stürzt immer ab ;-(.
Also, Find-Geschichte ist klar, aber wie übernehme ich das Ganze ins vbs? (die ungetestete Sparvariante läuft noch nicht...face-wink)
@

Ich bestreite alles und behaupte das Gegenteil - Asche auf bastlas Haupt!!! Und danke für den Hinweis - ich habe es echt übersehen ----

Hier der damals erstellte und dann überarbeitete Zielcode:

L=Split(CreateObject("Scripting.FileSystemObject").OpenTextFile("%Liste%").ReadAll,vbCrLf):Max=UBound(L)  
Ein=InputBox(Join(L,vbCrLf),"TEST"):If Not IsNumeric(Ein) Then Ein=0:End If:If CInt(Ein)^>Max Then Ein=0:End If:WScript.Echo CInt(Ein)  

for /f %%i in ('cscript //nologo %Input%') do set "Nr=%%i"  
if %Nr%==0 goto :weiter

PS: Noch einmal zu deinem obigen Script: Wie lese ich denn die Datei ein? Also, wo ist die Variable?

Gruß OKIDOKI
bastla
bastla 12.02.2013 um 23:51:45 Uhr
Goto Top
Hallo OKIDOKI!

Sorry - hatte Dein PS übersehen ...
Wie lese ich denn die Datei ein? Also, wo ist die Variable?
Variable hattest Du für "Test.txt" ja auch keine - daher wird beim Aufruf (siehe Beispielzeile oben) des VBScripts dieser Dateiname "hardcoded" übergeben.

Grüße
bastla
OKIDOKI
OKIDOKI 13.02.2013 um 17:50:48 Uhr
Goto Top
Hallo bastla,

irgendwie verstehe ich deinen Kommentar so, dass die Variable erst nach der Eingabe übergeben wird. Mir ist nur nicht klar, woher die Werte (wie im unteren Fall %Liste%) herkommen: OpenTextFile ... ? Oder nutzt er die gar nicht, sondern erwartet eigentlich nur eine Eingabe?

Gruß OKIDOKI
bastla
bastla 13.02.2013 um 21:04:26 Uhr
Goto Top
Hallo OKIDOKI!

Im "unteren" Fall muss es tatsächlich eine Batchvariable "%Liste%" geben, da diese während der Script-Erstellung schon fest in den Code integriert wird. Im "oberen" Beispiel verwendet das Script (per "WScript.Arguments(0)") einen Übergabeparameter - daher auch der Scriptaufruf in der Form
%temp%\msgbox.vbs Test.txt
Grüße
bastla
OKIDOKI
OKIDOKI 14.02.2013 um 14:26:35 Uhr
Goto Top
Hallo bastla,

super, danke für deine Erklärung!

Grüße OKIDOKI