[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
findstr 支持的正则太少了,早就想过。
除非 连续几个 findstr | findstr  这样。

TOP

没有分组功能 (ab)|(cd) 这样,这个真的可以做到?

TOP

这样的话,看来要用 /v 开关了。
我想想。

TOP

本帖最后由 caruko 于 2011-5-30 13:20 编辑

瑞年没有太精确。

就是把所有不合法的匹配串写进去,符合了就是不合法的。只是每个字串只匹配1-2个特征。
^[04-9]  指0000-0999  4000-9999年段。
^[3][1-9][1-9][1-9]  3111-3999好吧,这个其实不准确,没有包括3001-3099,要分成3个很麻烦。
^[0-9][0-9][0-9][0-9][2-9][0-9][0-9][0-9]$ ^[0-9][0-9][0-9][0-9][0-9][0-9][4-9][0-9]$ 指 月份不能是 20以上以及日期不能是40以上。
后面的分别对 13578,10,12 月限定 < 32, 469,11 <31 ,2月则根据年份最后一位是否02468,来决定是28还是29。
最后是限定 月份个位以及日期个位 <> 0

[^0-9]  去掉数字以外的字符,忘记了符号限定,修改一下。

呃,可以set计算的话,那么简单了。。
findstr判断了年份个位为13579的出现 0229为不合法,set 判断 02468后缀的年份情况。
  1. echo,%input%|findstr "^[04-9]  [^0-9]  ^[3][1-9][1-9][1-9][0-9]  ^[0-9][0-9][0-9][0-9][2-9][0-9][0-9][0-9]$ ^[0-9][0-9][0-9][0-9][0-9][0-9][4-9][0-9]$ ^[0-9][0-9][0-9][0-9][1][3-9][0-9][0-9] ^[0-9][0-9][0-9][0-9][0][469][3][1-9]$ ^[0-9][0-9][0-9][0-9][0][13578][3][2-9]$ ^[0-9][0-9][0-9][0-9][0][2][3-9][0-9]$ ^[0-9][0-9][0-9][13579][0][2][2][9]$ ^[0-9][0-9][0-9][0-9][1][02][3-9][2-9]$ ^[0-9][0-9][0-9][0-9][1][1][3-9][1-9]$ ^[0-9][0-9][0-9][0-9][0-9][0][0-9][0]$" >nul&& set input=10010229
  2. 2>nul set /a 1 / (%input:~0,4% %% 4) && (set /a 1 / (1%input:~4% - 10229)  && echo,合法 || echo,不合法 )  || echo,合法
复制代码
2

评分人数

    • zm900612: 难为你了,哈哈。技术 + 1
    • batman: 鼓励鼓励,请再修改 充分利用题意哦。。。PB + 5

TOP

本帖最后由 caruko 于 2011-5-30 11:56 编辑

日期判断,其实 xcopy /d 也可以判断,日期无效会输出如“无效参数 - /d:02-29-2001” 。
  1. echo,f|xcopy "%0" a#b@c$.bat /d:02-29-2002 /l /u 2>&1|findstr "无效参数.*d:" >nul&& echo,不合法 ||echo 合法
复制代码

TOP

findstr 如何判断年份被被4整除呢?

TOP

本帖最后由 caruko 于 2011-5-30 16:53 编辑

正向是符合任意一条都合法,而不是符合所有条件才合法。
逻辑上不对,所以不好用,加 /V 开关也不行。
反向过滤规则串更多。
包括 长度非法,非法非数字字符 等规则。

长度非法 直接 ^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$  或者 \<str>\ 也可以。
1

评分人数

TOP

返回列表