[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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么?求大神帮助
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

目录下的那份名单只列出名字吧,只要对比名字就可以了吧?

TOP

本帖最后由 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
复制代码

TOP

回复 3# pcl_test

名单的话是这样的
  1. 1300000001 张三
  2. 1300000002 王五
  3. 1300000003 李四
复制代码
和生成的数据一样的,现在去重的解决了,就差对比了。

TOP

回复 4# BillGates

3楼已修改

TOP

回复 5# pcl_test

这个不太懂欸,能解释一下吗?好像是可以用,但是我不知道怎么加进我的批处理里。

TOP

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

TOP

回复 7# BillGates

3楼的代码一步到位,只要把班级名单、学生作业和批处理文件放在一起运行,直接就把交与没交的导出到txt

TOP

回复 8# pcl_test

谢谢大神!真的是一步到位!要是只想根据名单和文件对比输出未交的名单呢?

TOP

回复 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

评分人数

TOP

问题得到解决后请在标题最前面注明[已解决]
http://www.bathome.net/thread-3473-1-1.html

TOP

回复 6# BillGates


    pcl_test 的思路是读取名单,再检查是否有包含此名称的文件

TOP

回复 10# pcl_test
这个一定要放在和文件一起吗,可以在哪里加入路径吗?

TOP

回复 12# CrLf


    发现大神就是不一样,我只能想到dir文件,输出,然后再对比,绕了好大的圈

TOP

回复 13# BillGates

如果名单放在其他路径,也要在名单前加指定目录路径\
@echo off
cd /d "指定学生作业目录路径\"

TOP

返回列表