本帖最后由 thp2008 于 2023-11-2 18:09 编辑
UsersDatabase.txt的内容如下:
UserName=user01
BeiZhu=备注名01
UserID=eyJ0Stas31001
UserName=user02
BeiZhu=备注名02
UserID=eyJ0Stas32002
UserName=user03
BeiZhu=备注名03
UserID=eyJ0Stas33003
UserName=user04
BeiZhu=备注名04
UserID=eyJ0Stas34004
UserName=user05
BeiZhu=备注名05
UserID=eyJ0Stas35005
.......- @echo off
- setlocal enabledelayedexpansion
-
- echo 请选择要查询的用户:
- echo.
- set /a count=0
- for /f "tokens=1,2 delims==" %%a in ('findstr /n "^" UsersDatabase.txt ^| findstr /i ":UserName="') do (
- set /a count+=1
- for /f "delims=: tokens=1" %%k in ("%%a") do (set "line=%%k"
- set /a line1=!line!+1
- echo !line1!
- for /f "tokens=1,2 delims==" %%x in ('findstr /n "^" UsersDatabase.txt ^| findstr /i "!line1!:BeiZhu="') do (
- set "BeiZhu=%%y"
- )
-
- )
- echo !count!. %%b --- !BeiZhu!
- )
复制代码 问题一:
其中 %%b 和 echo !line1! 中的!line1! 的值都正确。
问题出在这里:
for /f "tokens=1,2 delims==" %%x in ('findstr /n "^" UsersDatabase.txt ^| findstr /i "!line1!:BeiZhu="') do (
set "BeiZhu=%%y"
这个值输出不正确,显示FINDSTR: 没有搜索字符串
但是我直接在命令行下测试:是可以找到结果的2:BeiZhu=备注名01
findstr /n "^" UsersDatabase.txt ^| findstr /i "2:BeiZhu="
2:BeiZhu=备注名01
但是这里,我发现有时候很奇怪,就是有时候,查询不出,有时候可以,不知道是不是我的延迟变量没有处理好。还是语法有问题。
感觉是我语法上,还是什么问题。
我最终需要输出两个变量用户名和对应的备注名
echo !count!. 用户名 --- 备注名
显示效果如下:
请选择要查询的用户:
1.user01 --- 备注名01
2.user01 --- 备注名02
3.user01 --- 备注名03
4.user01 --- 备注名04
5.user01 --- 备注名05
......
问题二:
!line1! 的值,我想用三位表示,因为真实的USERDATABASE.txt的数据很多,如果不补足三位,就会出现findstr /n "^" UsersDatabase.txt ^| findstr /i "!line1!:BeiZhu=" 找到不唯一的数据。
比如:
findstr /n "^" UsersDatabase2.txt | findstr /i "2:BeiZhu="
2:BeiZhu=备注名01
32:BeiZhu=备注名27
62:BeiZhu=备注名54
92:BeiZhu=备注名83
122:BeiZhu=备注名110
152:BeiZhu=备注名132
182:BeiZhu=备注名170
类似这样,所以我想将这个序号,格式化成三位数字,不足3位的用零补齐。如2就用002表示。35就用035表示,如果有更好的办法,也可以。
感谢大神们来帮忙! |