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

[文本处理] 批处理如何将文件名中指定部分的字符串与文本内指定位置的字符串作比较?

L550_407B12-L4__16-03-29-3这个文件是要比对的,文件名的16-03-29-3和文件里面的20160329-31比对,现出现的情况是最后是单数,TXT文本里面的是双数,运行批处理文件检测不出来,不生成文件,求大神修改。有一个文件是批处理文件,我已经改成TXT格式了。
1

评分人数

-3 是怎么变成 -31 的

TOP

本帖最后由 happy886rr 于 2016-3-29 21:55 编辑

回复 1# iedcsve 应该是你要的吧
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /r %%a in (*.txt) do (
  3. for /f "tokens=4-7 delims=_-" %%w in ("%%~na") do (set str=20%%~w%%~x%%~y-%%~z)
  4. for /f "tokens=3" %%w in ('type "%%a"^|findstr /irc:"\$\$ SERIAL 20[0-9][0-9][0-1][0-9][0-3][0-9]-[0-9]*"') do (set std=%%~w)
  5. if not "!str!"=="!std!" (set/a i+=1 &echo 编号:!i!     谬名文件%%~nxa     归属目录%%~dpa)
  6. ))>谬名清单.log
  7. start 谬名清单.log
复制代码
1

评分人数

    • iedcsve: 操作快捷,非常感谢技术 + 1

TOP

回复 1# iedcsve

只想说,31不是双数

TOP

回复 2# CrLf
是出报告的时候手动输入的。

TOP

回复 3# happy886rr

非常感谢你的回答,也有可能是我没有描述清楚,我们出报告的时候最后编号是手动输入的。
现在存在以下几种情况
第一种,文件名最后一位是单数,TXT文件里面是单数
第二种,文件名最后一位是单数,TXT文件里面是双数
第三种,文件名最后一位是双数,TXT文件里面是单数
第四种,文件名最后一位是双数,TXT文件里面是双数
以上四种情况都需要进行判断
是不是要先判断位数,再进行比对。
比如说我提供的文件名从16-03-29-3与TXT文本里面的20160329-31进行比对,也是从16开始,去掉中划线后,内外的编号必须一致,多空格也不行。
劳烦您根据以上内容再帮我改改。非常感谢。

TOP

回复 7# iedcsve
晕,我的批处理就是按内外一致写的,不需要改,直接用就行。

TOP

回复 8# happy886rr
不好意思,我上次用的时候没有用好,现在可以用了,非常感谢,代码能否帮我更新下,就是只有错误的时候才生成 谬名清单.log文件。麻烦了。

TOP

回复 8# happy886rr
文件名内外正确的时候,也会生成错误文件,但里面是空的

TOP

返回列表