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

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

[复制链接]
发表于 2015-4-8 19:38:10 | 显示全部楼层 |阅读模式
本帖最后由 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么?求大神帮助

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2015-4-8 20:05:21 | 显示全部楼层
目录下的那份名单只列出名字吧,只要对比名字就可以了吧?
发表于 2015-4-8 20:15:58 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2015-4-8 20:40:46 | 显示全部楼层
回复 3# pcl_test

名单的话是这样的
  1. 1300000001 张三
  2. 1300000002 王五
  3. 1300000003 李四
复制代码
和生成的数据一样的,现在去重的解决了,就差对比了。
发表于 2015-4-8 21:05:03 | 显示全部楼层
回复 4# BillGates

3楼已修改
 楼主| 发表于 2015-4-8 21:13:24 | 显示全部楼层
回复 5# pcl_test

这个不太懂欸,能解释一下吗?好像是可以用,但是我不知道怎么加进我的批处理里。
 楼主| 发表于 2015-4-8 21:15:42 | 显示全部楼层
回复 5# pcl_test
我的现在是根据大家提交的文件然后获取文件名后输出了一份已交作业的名单.txt,然后还有一份班级人员的名单.txt接着想对比出没交的人,不知道有没有更好的办法。
发表于 2015-4-8 21:19:36 | 显示全部楼层
回复 7# BillGates

3楼的代码一步到位,只要把班级名单、学生作业和批处理文件放在一起运行,直接就把交与没交的导出到txt
 楼主| 发表于 2015-4-8 21:29:21 | 显示全部楼层
回复 8# pcl_test

谢谢大神!真的是一步到位!要是只想根据名单和文件对比输出未交的名单呢?
发表于 2015-4-8 21:32:43 | 显示全部楼层
回复 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
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2015-4-8 21:33:56 | 显示全部楼层
问题得到解决后请在标题最前面注明[已解决]
http://www.bathome.net/thread-3473-1-1.html
发表于 2015-4-8 21:44:17 | 显示全部楼层
回复 6# BillGates


    pcl_test 的思路是读取名单,再检查是否有包含此名称的文件
 楼主| 发表于 2015-4-8 21:46:15 | 显示全部楼层
回复 10# pcl_test
这个一定要放在和文件一起吗,可以在哪里加入路径吗?
 楼主| 发表于 2015-4-8 21:46:56 | 显示全部楼层
回复 12# CrLf


    发现大神就是不一样,我只能想到dir文件,输出,然后再对比,绕了好大的圈
发表于 2015-4-8 21:54:08 | 显示全部楼层
回复 13# BillGates

如果名单放在其他路径,也要在名单前加指定目录路径\
@echo off
cd /d "指定学生作业目录路径\"
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 11:21 , Processed in 0.024524 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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