我在解决这个问题时遇到了问题。 我要做的是列出一个文本文件(%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%”。
基本上,我如何使用指定的数字输出文本文件的内容,然后允许用户选择其中一个编号的输出并将其分配给变量。
任何帮助都表示赞赏,并坚持了几天。
答案 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