2016-08-08 55 views
1

Ich habe ein Problem, das mich dabei beschäftigt. Die Sache, die ich versuche zu tun, listet den Inhalt einer Textdatei (% textfile%) mit einer Nummer vor, die jedes Mal erhöht, wenn eine neue Zeile der Textdatei gedruckt wird, dann diese Nummer der Ausgabe zuweisen. Es muss in Form einer Batchdatei für meine Zwecke vorliegen.Ausgabeinhalt der Textdateivariable in der nummerierten Liste, die in einem Menü verwendet werden soll

Beispiel:

for /f "delims=" %%A in (%textfile%) do (echo %%A & echo.) 

Ausgang:

Output1 

Output2 

Output3 

... etc 

Was ich tun möchte:

1. Output1 

2. Output2 

3. Output3 

... etc 

Dieses in einem Menü verwendet werden soll, die Sie fragt, wählen einer der oben genannten. Wenn Sie 1 auswählen, wird Output1 auf eine Variable gesetzt, die in einem anderen Skript verwendet werden soll.

set /P menuSelect=Please make a selection: 
for /f "delims=0-%highestVariable%" %%a in ("%menuSelect%") do echo Incorrect input, press any key to try again & pause>nul & goto :otherFunction 

Etwas anderes ich herauszufinden versuche, ist, wie die delimter gleich 0 durch die höchste numerische Ausgabe in dem obigen Code zu setzen. Deshalb setze ich "delims = 0-% highestVariable%".

Also, im Wesentlichen, wie gebe ich den Inhalt der Textdatei mit einer Nummer zugewiesen, dann darf der Benutzer einen der nummerierten Ausgänge auswählen und es einer Variablen zuweisen.

Jede Hilfe wird geschätzt, seit ein paar Tagen darauf festgefahren.

Antwort

2

fügen Sie einfach einen Zähler (Sie delayed expansion benötigen):

@echo off 
setlocal enabledelayedexpansion 
set count=0 
for /f "delims=" %%A in (%textfile%) do (
    set /a count+=1 
    echo !count!. %%A & echo. 
) 
set numbers=123456789 
set numbers=!numbers:~0,%count%! 
echo %numbers% 
echo on 
set /p "select=number: " 
for /f "delims=%numbers%" %%a in ("%Select%") do echo Incorrect input, press any key to try again & pause>nul & goto :otherFunction 

Bitte beachten Sie, dass Ihr delims Trick kann mit Zähler> = 10 nicht zuverlässig arbeiten.

+0

Ich mag dieses und es löst das Problem, sie anzuzeigen (danke für den Tipp auf verzögerte Expansion), aber es stellt nicht jede Auswahl auf eine Variable. Wie würde ich meine Eingabe von 1 gleich machen was auch immer %% A ist neben 1? Durch mein Verständnis, ist es so '1 ausgeben. %% A' '2. %% A' '3. %% A' Wie würde ich es machen '1. %% A' '2. %% B' '3. %% C' so wählt meine Eingabe, was neben der Nummer ist? Tut mir leid, wenn ich keinen Sinn mache und immer noch lerne. –

+0

Vergiss es! Ich löste das, indem ich hinzufügte: 'set txt! NumCount! = %% A 'in dem Befehl FOR. Die Variablen txt1 und txt2 werden korrekt als Optionen 1 und 2 angezeigt. –

0

eine andere Art und Weise des Zählens,

@echo off 
set/a numOptions=0 
for /F "tokens=1,* delims=[]" %%A in ('"type "%textfile%"|find /N /V """') do (
    echo %%A. %%B 
    set/A numOptions+=1 
) 
echo you have %numOptions% lines in %textfile% 
... 
... 
... 
rem your code here