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

[文本处理] 求助,批处理重命名图片文件名

[复制链接]
发表于 2021-5-18 14:13:38 | 显示全部楼层
用的.*([1-9][0-9]{5}(19|20)[0-9]{2}(([0][13-9]|11|12)([0][1-9]|[12][0-9]|30)|([0][13578]|10|12)(31)|(02)([0][1-9]|1[0-9]|2[0-8]|29))[0-9]{3}[0-9X]).*替换分组1
根据计算的闰年平年对分组那里支持到2月28再加一个28+0和28+1的变量,或根据判断平年闰年分开执行不同命令,得到100%身份证命名规则,执行后得到效果是:
  1. 身份证:431103197605186731的信息为闰年1976年出生,02月18日小于2月30天,即将重命名……
  2. ren "张三0000000000000431103197605186731000000000000·永州市.jpg" "431103197605186731.jpg"

  3. 身份证:310117197005158411的信息为平年1970年出生,02月15日小于2月29天,即将重命名……
  4. ren "张三1719700515841131011719700515841131014666432·上海市.png" "310117197005158411.png"

  5. 张三ZZZZ00000000000000000000000000000000000000000000.jpg :文件名不含中华人民共和国第二代身份证号命名规则

  6. 身份证:45070119830418326X的信息为平年1983年出生,02月18日小于2月29天,即将重命名……
  7. ren "张三钦州市 45070119830418326X76543248765457.jpg.jpg.jpg.jpg" "45070119830418326X.jpg"

  8. 身份证:510300197705179628的信息为平年1977年出生,02月17日小于2月29天,即将重命名……
  9. ren "自贡市·510300197705179628510300197705179628855张三.png.png" "510300197705179628.png"

  10. 请按任意键继续. . .
复制代码
刚开始计算平年闰年除4可以,同时整百时除400时候说括弧不对称,就是就卡这里的,后来发现是!必须要用^!,不然括弧不对称
发表于 2021-5-18 14:20:40 | 显示全部楼层
回复 17# xp3000
厉害!!!
发表于 2021-5-18 14:28:53 | 显示全部楼层
  1. @if(0)==(0) echo off&setlocal EnableDelayedExpansion
  2.     for /f "delims=" %%j in ('dir /b/a-d/on "*.jpg" "*.png"') do (
  3.     @for /f "delims=" %%k in ('echo %%~nj^|cscript -nologo -e:jscript "%~f0"') do (
  4. if "%%j" neq "%%k%%~xj" (
  5.     set str=%%k&set year=!str:~6,4!&set day=!str:~12,2!
  6. set /a "y=^!(year%%4)&^!(^!(year%%100))|^!(year%%400)"
  7. set /a str=28+!y!&echo,身份证:%%k的信息为闰年!year!年出生,2月!str!天
  8.             ) else (
  9.         echo %%j :文件名不含中华人民共和国身份证号命名规则&echo.
  10.         )
  11.     )
  12. )
  13. pause & exit /b
  14. @end

  15. var objShell  = new ActiveXObject('Shell.Application');

  16. while(!WScript.StdIn.AtEndOfStream) {
  17.     var strFile = WScript.StdIn.ReadLine();
  18.     var strFile = strFile.replace(/.*([1-9][0-9]{5}(19|20)[0-9]{2}(([0][13-9]|11|12)([0][1-9]|[12][0-9]|30)|([0][13578]|10|12)(31)|(02)([0][1-9]|1[0-9]|2[0-8]|29))[0-9]{3}[0-9X]).*/g, '$1');
  19.     WSH.Echo(strFile);
  20. }
复制代码
气死了,我上午看见括弧不对称给删除,现在重写居然忘记了,,我也不怎么会弄JS,

评分

参与人数 1技术 +1 收起 理由
qqnn666 + 1 技术

查看全部评分

发表于 2021-5-18 14:41:42 | 显示全部楼层
想起了来了,set day=!str:~12,2!,加个判断是否大于或小于等于str变量,对命名规则进行操作
发表于 2021-5-18 15:58:21 | 显示全部楼层
回复 18# xp3000
关于月份和日期的正则表达,也可以这样考虑:
1、3、5、7、8、10、12月有31号;除去2月都有30号;润2月及其它个月都会有1~29号。根据以上情况月份日期用正则表达式分3段表示如下。
  1. (0[13578]|1[02])31|(0[13-9]|1[0-2])30|(0[1-9]|1[0-2])(0[1-9]|[12][0-9])
复制代码
发表于 2021-5-18 16:42:02 | 显示全部楼层
多选结构中,特殊的部分放在前面,有利于提高效率。
发表于 2021-5-18 17:14:16 | 显示全部楼层
谢谢,这样简洁
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 15:59 , Processed in 0.020652 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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