Board logo

标题: [文本处理] [已解决]批处理提取文件名前几位后输出结果去除重复字符 [打印本页]

作者: BillGates    时间: 2015-4-8 19:38     标题: [已解决]批处理提取文件名前几位后输出结果去除重复字符

本帖最后由 BillGates 于 2015-4-8 22:22 编辑

是这样的,因为要处理学生提交的作业(图片),然后命名的样式是这样的:学号+姓名+图片名,每个人上交的份数不止一份,现在要用批处理提取文件名的前14位正好为学号加姓名,可以与目录下的一份名单进行对比,快速看出谁没提交作业,但是目前只写出了提取文件名的,后面比对还想不出,还有一个问题就是提取文件名的输出结果会有重复的,因为提交的份数不止一份,不知道如何解决是好,求助各位大神搭救。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=* delims=" %%i in ('dir /b /a-d *.*') do (
  4.     set "line=%%i"
  5.     echo !line:~0,14!
  6.     echo !line:~0,14!>>作业提交.txt
  7. )
  8. pause
复制代码
代码是这样的,输出的结果是这样的
  1. 1300000001 张三
  2. 1300000001 张三
  3. 1300000001 张三
  4. 1300000001 张三
  5. 1300000002 王五
  6. 1305000003 李四
  7. 1305000003 李四
复制代码
我应该要如何在输出的时候去除重复的结果呢?像这样的
  1. 1300000001 张三
  2. 1300000002 王五
  3. 1305000003 李四
复制代码
最后的对比应该怎么对比呢,用findstr么?求大神帮助
作者: pcl_test    时间: 2015-4-8 20:05

目录下的那份名单只列出名字吧,只要对比名字就可以了吧?
作者: pcl_test    时间: 2015-4-8 20:15

本帖最后由 pcl_test 于 2015-4-8 21:04 编辑

假设名单只有名字且一个名字占一行,那么
  1. @echo off
  2. (for /f "tokens=1*" %%a in ('type "名单.txt"') do (
  3. if exist "*%%b*.*" (echo,%%a %%b[已交]) else (echo,%%a %%b[未交])
  4. ))>"作业提交情况.txt"
  5. pause
复制代码

作者: BillGates    时间: 2015-4-8 20:40

回复 3# pcl_test

名单的话是这样的
  1. 1300000001 张三
  2. 1300000002 王五
  3. 1300000003 李四
复制代码
和生成的数据一样的,现在去重的解决了,就差对比了。
作者: pcl_test    时间: 2015-4-8 21:05

回复 4# BillGates

3楼已修改
作者: BillGates    时间: 2015-4-8 21:13

回复 5# pcl_test

这个不太懂欸,能解释一下吗?好像是可以用,但是我不知道怎么加进我的批处理里。
作者: BillGates    时间: 2015-4-8 21:15

回复 5# pcl_test
我的现在是根据大家提交的文件然后获取文件名后输出了一份已交作业的名单.txt,然后还有一份班级人员的名单.txt接着想对比出没交的人,不知道有没有更好的办法。
作者: pcl_test    时间: 2015-4-8 21:19

回复 7# BillGates

3楼的代码一步到位,只要把班级名单、学生作业和批处理文件放在一起运行,直接就把交与没交的导出到txt
作者: BillGates    时间: 2015-4-8 21:29

回复 8# pcl_test

谢谢大神!真的是一步到位!要是只想根据名单和文件对比输出未交的名单呢?
作者: pcl_test    时间: 2015-4-8 21:32

回复 9# BillGates
  1. @echo off
  2. (for /f "tokens=1*" %%a in ('type "名单.txt"') do (
  3. if not exist "*%%b*.*" (echo,%%a %%b[未交])
  4. ))>"作业提交情况.txt"
  5. pause
复制代码

作者: pcl_test    时间: 2015-4-8 21:33

问题得到解决后请在标题最前面注明[已解决]
http://www.bathome.net/thread-3473-1-1.html
作者: CrLf    时间: 2015-4-8 21:44

回复 6# BillGates


    pcl_test 的思路是读取名单,再检查是否有包含此名称的文件
作者: BillGates    时间: 2015-4-8 21:46

回复 10# pcl_test
这个一定要放在和文件一起吗,可以在哪里加入路径吗?
作者: BillGates    时间: 2015-4-8 21:46

回复 12# CrLf


    发现大神就是不一样,我只能想到dir文件,输出,然后再对比,绕了好大的圈
作者: pcl_test    时间: 2015-4-8 21:54

回复 13# BillGates

如果名单放在其他路径,也要在名单前加指定目录路径\
@echo off
cd /d "指定学生作业目录路径\"
作者: BillGates    时间: 2015-4-8 22:22

回复 15# pcl_test


    谢谢大神




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2