已经搞定,固定字符为 tingid ,要显示变量 tingid1到tingid4,则可以这样表示
for /l %%i in (1,1,4) echo !tingid%%i!
@echo off&setlocal ENABLEDELAYEDEXPANSION
:start
title administrator 密码修改工具。(会顺便将inst的密码设置为gmcc@10086) XXX 版权所有
echo.
echo 请输入服务厅名称,部分汉字、拼音、拼音缩写均可(至少2个字符)~~~
echo 输入 h 可查看帮助
set ting=
set /p ting=
if /I "%ting%"=="h" goto help
if "%ting%"=="" goto start
rem 下面这段确定要跳过的行数num,避免了查询无效数据
for /f "delims=:" %%a in ('findstr /n /I /c:":data" 服务厅密码修改.bat') do set num=%%a
for /f "skip=%num%" %%a in (服务厅密码修改.bat) do echo %%a>>data.dat
set n=0
echo 符合条件的服务厅列表如下:
echo.
for /f "tokens=1-5 delims=^|" %%a in ('findstr /I /c:"%ting%" data.dat') do (
set /a n=n+1
set tingname!n!=%%b
set tingpw!n!=%%e
)
del /f /s /q data.dat >nul 2>nul
for /l %%i in (1,1,%n%) do (
echo 编号:%%i 服务厅:!tingname%%i! 管理员密码:【!tingpw%%i!】
)
:select
echo.
echo 请输入服务厅的编号以便设置本机管理员密码:
set ting=
set /p ting=
rem 判断变量是否数字,如果不是则返回select
rem 下面将变量写入文本,因为findstr好像不能 【findstr "" 文本】
echo %ting%>data.dat
rem 用findstr判断变量是否数字,如果不是数字就输出为空,其他情况设置ting为数字
for /f %%a in ('findstr "" data.dat') do set ting=%%a
rem 下面三行检查变量ting是否为空,以及是否小于0或大于列表的最大值,如果是,就返回select
if "%ting%"=="" goto select
if /i %ting% LEQ 0 goto select
if /i %ting% GTR %n% goto select
echo.
echo 将执行命令【net user administrator !tingpw%ting%!】
net user administrator !tingpw%ting%!
pause
net user inst gmcc@10086
:exit
exit
:help
title 帮助文件。内置密码文件为 20080115 版本 XXX 版权所有
cls
echo.
echo 输入服务厅的名字、拼音、缩写都可以模糊查询到数据
echo 内置的密码表是20080115版本的,如果以后更新了,请
echo 编辑本文件,并将最后的【:data】小节依样添加上去,
echo 并用 ^| 符号隔开,格式如下:
echo.
echo 序号^|服务厅名称^|拼音缩写^|拼音全称密码
echo.
pause
cls
goto :start
:data
1|洪湖|hh|honghu|xxxxxxx
2|湖贝|hb|hubei|xxxxxxx
3|火车站|hcz|huochezhan|xxxxxxx
4|宝安路|bal|baoanlu|xxxxxxx
5|布心|bx|buxin|xxxxxxx
第一次修改:
跳过了标签 :data 之前的数据,避免了findstr查询类似 a 这样在很多地方都有的数据导致产生的无效变量。
第二次修改:
增加了输入判断,第一次判断输入的服务厅缩写是否为空或h,如果是空则跳回开头,h跳到帮助。
第二个判断,是列出满足查询条件的厅列表后,判断输入的编号是否数字,以及数字范围是否超过1~%n%的范围,如果不满足条件,要求重新输入
Last edited by exzzz on 2008-12-24 at 19:08 ]