在编号列表中输出文本文件变量的内容,以便在菜单

时间:2016-08-08 04:24:50

标签: batch-file for-loop input batch-processing delimiter

我在解决这个问题时遇到了问题。 我要做的是列出一个文本文件(%textfile%)的内容,前面有一个数字,每次打印一个新的文本文件行时都会增加,然后将该数字分配给输出。出于我的目的,它必须是批处理文件的形式。

示例:

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

输出:

Output1

Output2

Output3

... etc

我希望它能做什么:

1. Output1

2. Output2

3. Output3

... etc

这将在菜单中使用,要求您选择上述之一。 选择1会将Output1设置为要在另一个脚本中使用的变量。

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

我想弄清楚的是如何通过上面代码中的最高数字输出将分隔符设置为等于0。这就是为什么我设置“delims = 0-%highestVariable%”。

基本上,我如何使用指定的数字输出文本文件的内容,然后允许用户选择其中一个编号的输出并将其分配给变量。

任何帮助都表示赞赏,并坚持了几天。

2 个答案:

答案 0 :(得分:2)

只需添加一个计数器(您需要delayed expansion):

@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

请注意,对于计数器> = 10,您的delims技巧可能无法正常工作。

答案 1 :(得分:0)

另一种计算方式,

@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