找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27447|回复: 13

[文本处理] 批处理如何根据文本文档中提供的姓名和手动输入特定的日期查询对应记录?

[复制链接]
发表于 2012-6-13 13:33:25 | 显示全部楼层 |阅读模式
一个消费记录文档412.txt:
部门编号    部门名称     人员编号      人员姓名     消费时间      消费金额     消费数量        消费模式     机器编号        机器名称        餐别        硬件机号
1008        三车间        EB0702        张杰      2012-05-02     1.5        1                    0:计次        SF0001        售饭机1        早餐          SF0001
1011        模具           XZ156        李飞        2012-05-02     1.5        1                    0:计次        SF0001        售饭机1        早餐          SF0001

人员列表.txt ,内容如下
张杰
李飞

如何根据文本文档中提供的姓名和手动输入的日期查询对应记录


前几天在网友的帮助下,整理到如下命令,
  1. for /f "delims=" %%c in (人员列表.txt) do (
  2. >>所需结果.TXT set /p =%%c <nul
  3. findstr "%%c" 412.txt >> temp.txt
  4. :AA
  5. set /p ri=只搜索日期(两位数):
  6. findstr "[0-9][0-9][0-9][0-9]-[0-9][0-9]-%ri%" temp.txt >> %%c.txt && echo 查到%%c%ri%号的消费记录 || echo 没有找到%%c%ri%日的消费记录>>%%c.txt
  7. echo 查询别的日期
  8. )
复制代码
下网那位高手帮忙写完。
需要查询的每个人日期不一样,比如说一个人要查1,2,7,8,14,17,另一个人可能要查8,15,20,21,22,25,28,31号
能否限定要输入的次数,然后结束循环,查下一个人?
为方便倒计时选择,可以加入choice语句,我从windows 2003上复制过来执行
发表于 2012-6-13 16:39:21 | 显示全部楼层
试试
  1. @echo off
  2. :st
  3. cls&set/p i=请输入日期(yyyy-mm-dd):
  4. for /f "delims=" %%a in (人员列表.txt) do (
  5.   setlocal enabledelayedexpansion
  6.   for /f "delims=" %%b in (412.txt) do (
  7.     for /f "tokens=4,5 delims= " %%c in ("%%b") do (
  8.       if "%%c"=="%%a" if "%%d"=="%i%" set flag=1
  9.     )
  10.   )
  11.   if "!flag!"=="1" (echo %%a 有记录) else echo %%a 无记录
  12.   endlocal
  13. )
  14. pause&goto :st
复制代码
 楼主| 发表于 2012-6-13 16:46:40 | 显示全部楼层
本帖最后由 jshuanya 于 2012-6-13 16:49 编辑
试试
apang 发表于 2012-6-13 16:39


好象不行。
是查出姓名在某一天是否有消费记录,然后要查五六天

一般年份,月份都固定了,为避免重复输入,只输入号数(两位数)
实际上412.txt文件有几万条记录
人员列表也有上千条记录
发表于 2012-6-13 17:09:39 | 显示全部楼层
看样子你是要把每个人都查一遍咯?只是每个人要查询的日期不一样。
发表于 2012-6-13 18:29:30 | 显示全部楼层
仔细揣摩了10多分钟,硬是不明白是啥意思
理解能力有限,我放弃。。。
 楼主| 发表于 2012-6-14 08:21:38 | 显示全部楼层
看样子你是要把每个人都查一遍咯?只是每个人要查询的日期不一样。
powerbat 发表于 2012-6-13 17:09



    是的。
 楼主| 发表于 2012-6-14 08:23:17 | 显示全部楼层
仔细揣摩了10多分钟,硬是不明白是啥意思
理解能力有限,我放弃。。。
apang 发表于 2012-6-13 18:29



      是每个人刷卡消费,然后休息天刷卡不是免费的,统计出那个。
每个人的休息天不固定。
 楼主| 发表于 2012-6-14 14:48:47 | 显示全部楼层
anybody,please?
发表于 2012-6-14 15:01:41 | 显示全部楼层
楼主手动输入不累吗...建议从文本中获取输入,比如:
list.txt
  1. 张杰 1 2 7 8 14 17
  2. 李飞 8 15 20 21 22 25 28 31
复制代码
 楼主| 发表于 2012-6-14 21:28:07 | 显示全部楼层
楼主手动输入不累吗...建议从文本中获取输入,比如:
list.txt
CrLf 发表于 2012-6-14 15:01



    偶的代码已经是从一个文本中获取了。
但是还要查询每个姓名在多天有无记录,这就不知道能不能实现了。
发表于 2012-6-14 21:40:55 | 显示全部楼层
按顶楼代码改的:
  1. @echo off
  2. set /a 输入的次数=5
  3. for /f "delims=" %%c in (人员列表.txt) do (
  4.    >>所需结果.TXT set /p =%%c <nul
  5.    findstr "%%c" 412.txt >> temp.txt
  6.    setlocal enabledelayedexpansion
  7.    for /l %%a in (1 1 %输入的次数%) do set>con /p in=只搜索日期(两位数):&set "ri=!ri! [0-9][0-9][0-9][0-9]-[0-9][0-9]-!in!"
  8.    findstr "!ri!" temp.txt  && echo 查到%%c%ri%号的消费记录>con || echo 没有找到%%c%ri%日的消费记录
  9.    echo 查询别的日期>con
  10.    endlocal
  11. )>>"%%c.txt"
复制代码
 楼主| 发表于 2012-6-28 09:23:14 | 显示全部楼层
按顶楼代码改的:
CrLf 发表于 2012-6-14 21:40



    这样子能实现,就是不知道搜索的是谁
还得打开列表一个个看,如果人数多一看花眼就可能出错
发表于 2012-6-28 10:17:01 | 显示全部楼层
仔细揣摩了10多分钟,硬是不明白是啥意思
理解能力有限,我放弃。。。
apang 发表于 2012-6-13 18:29



    哈哈 真是的,语文不过关,嘎嘎
发表于 2012-6-28 10:17:55 | 显示全部楼层
弄个SQL 好了,嘎嘎
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 06:18 , Processed in 0.024955 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表