无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 2070|回复: 33
打印 上一主题 下一主题

[求助] 批处理改名

[复制链接]
跳转到指定楼层
1#
发表于 2024-2-26 20:51:55 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
文件夹内都是jpg图片文件,
名称规律是:姓名+下划线+数字+空格+名称+下划线+身份证号.jpg
例如:(蓝色部分是固定的)
张三_23 幼_130455199002020322.jpg
李四_23 幼_130455199002020611.jpg
王五_23 幼_130455199002020724.jpg
......
======================
现在有一个txt文档,比如名字是 ming.txt
内容规律如下:姓名,性别,工号,身份证号....(用英文逗号分隔开,每行一个)
例如:
张三,男,20220003,130455199002020322
李四,男,20220004,130455199002020611
王五,男,20220005,130455199002020724

......
=========================
现在想根据 ming.txt把文件夹内的jpg图标都改名
改成  姓名_工号.jpg

怎么使用for 还有findstr完成,想着这2个命令可以

34#
发表于 2024-3-9 20:17:31 | 只看该作者
感谢分享
回复

使用道具 举报

33#
发表于 2024-3-5 17:49:53 来自手机 | 只看该作者
很实用的
回复

使用道具 举报

32#
 楼主| 发表于 2024-3-4 23:13:26 | 只看该作者
dos时代菜鸟 发表于 2024-3-4 21:14
原来 原始 ming.csv 中没有 身份证号,那就换个思路。

见附件,把含有 ming.csv 及 *.jpg 的 ...

嗯,有身份证号的话不会重复,它们可能做文档的时候没有弄上去,所以前面的批处理就会有重名的情况。
这些都留着,测试测试
回复

使用道具 举报

31#
发表于 2024-3-4 21:14:37 | 只看该作者
本帖最后由 dos时代菜鸟 于 2024-3-5 19:01 编辑
  1. @ECHO OFF
  2. setlocal ENABLEDELAYEDEXPANSION
  3. if "%~1"=="" goto :end1
  4. set "dir1=%~1"
  5. set "file1=%~dp0222.txt"
  6. PUSHD %1

  7. echo.>"!file1!"
  8. for /f "tokens=1,3 delims=," %%c in (ming.csv) do (
  9.     call :ren1 %1 %%c %%d
  10. )
  11. goto :end2

  12. :ren1
  13.     for %%i in (%2*.jpg) do (
  14.         for /f "tokens=3 delims=_." %%l in ("%%i") do (
  15.             set "str1=%%l"
  16.             if not  "!str1:~15,3!"=="" (
  17.                 echo %%~ni %2_%3
  18.                 echo %%i,!str1!,%2_%3.jpg>>"!file1!"
  19.                 ren  "%%i" "%2_%3.jpg"
  20.                 exit /b
  21.             )
  22.         )
  23.     )
  24. exit /b

  25. :end1
  26.     echo “参数不对”!
  27.     echo.
  28. :end2
  29.     pause

复制代码




222-2.7z (83.5 KB, 下载次数: 8)
原来 原始 ming.csv 中没有 身份证号,那就换个思路。

见附件,把含有 ming.csv 及 *.jpg 的文件夹 拖放到 222-1.cmd 中,就可以得到结果,并生成记录文件 222.txt ,可以解决姓名重名问题。

分析原始 jpg 文件名称 包含信息的特点和 更名后的文件名特点,区别是 身份证号 位数要长一些,第15-18 位有内容。
文件夹 和 ming.csv 中都有姓名重名情况,但是,没有 身份证与工号的一一对应关系。所以,输出一个 更名 对应关系的记录文件 是 必要的。

如此,就算重名,如果 这个 jpg 文件 已经不是原始名字了,就 不予考虑。
遍历 ming.csv ,一行一行的过,在文件夹中找到第一个 没改名的 jpg (改过的不算,找下一个) ,就 改名,然后以此类推,同时把 改名记录存入 222.txt 。









点评

嗯,有身份证号的话不会重复,它们可能做文档的时候没有弄上去,所以前面的批处理就会有重名的情况。 这些都留着,测试测试  详情 回复 发表于 2024-3-4 23:13

评分

参与人数 1无忧币 +5 收起 理由
freesoft00 + 5

查看全部评分

回复

使用道具 举报

30#
发表于 2024-3-4 20:28:10 | 只看该作者
本帖最后由 dos时代菜鸟 于 2024-3-4 20:29 编辑

222.7z (552 Bytes, 下载次数: 1)

把 名为 1 的文件夹 拖放到 批处理 222.cmd 上,就可以实现效果。注意 ming.txt 和 222.cmd 在 同一个位置。







回复

使用道具 举报

29#
发表于 2024-3-4 19:00:40 来自手机 | 只看该作者
advancerename
回复

使用道具 举报

28#
发表于 2024-2-28 08:10:40 | 只看该作者
学习学习
回复

使用道具 举报

27#
发表于 2024-2-28 05:45:43 | 只看该作者
学习学习
回复

使用道具 举报

26#
发表于 2024-2-27 19:53:30 | 只看该作者

赞,谢谢分享。
回复

使用道具 举报

25#
发表于 2024-2-27 19:27:09 | 只看该作者
楼主:很早以前我从好压软件里面提取制作的批“量改名”单文件版工具,能够满足你的使用需求。把下面的中文文字删除之后就可以登陆网盘下载了
https:删//pan.baidu.除com/s/删1m9Z1z-kNhdClYOBo2NVEzg?pwd除=2yg5

评分

参与人数 1无忧币 +5 收起 理由
freesoft00 + 5

查看全部评分

回复

使用道具 举报

24#
发表于 2024-2-27 16:31:48 | 只看该作者
进来学习
回复

使用道具 举报

23#
发表于 2024-2-27 11:38:09 | 只看该作者
本帖最后由 likeyouli 于 2024-2-27 14:36 编辑
freesoft00 发表于 2024-2-27 09:10
工号不会重复,只有名字会,用什么工具或者代码都可以,只要完成任务什么都可以

Sub wuyouchuti()
Dim t As Workbook, str, dan As Range
Set t = Workbooks.Open("D:\ming.csv") '这里根据实际更改,要求ming.csv和图片必须在同一目录。
'以下代码对ming.csv拆列,要求表格的a列为姓名,性别,工号,身份证号
Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
        :=",", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 2)), _
        TrailingMinusNumbers:=True
'以下代码增加一列姓名排序,F列可实现没有重复名字的为张三_222222,有重复名字的为张三_222222_1,_2等。
   Range("E1").FormulaR1C1 = "=IF(COUNTIF(C[-4],RC[-4])>1,COUNTIF(R1C1:RC[-4],RC[-4]),"""")"
    Range("E1").AutoFill Destination:=Range("e1", "e" & Cells(Rows.Count, 1).End(xlUp).Row)
   Range("F1").FormulaR1C1 = "=IF(RC[-1]="""",RC[-5]&""_""&RC[-3],RC[-5]&""_""&RC[-3]&""_""&RC[-1])"
   Range("F1").AutoFill Destination:=Range("F1", "F" & Cells(Rows.Count, 1).End(xlUp).Row)
str = t.Path
tu = Dir(str & "\")
Do
If tu <> "ming.csv" Then
    s3 = Mid(tu, Application.Find("_", tu, Application.Find("_", tu) + 1) + 1, 18)
    Set dan = ActiveSheet.UsedRange.Find(s3)
    s1 = str & "\" & tu
    s2 = str & "\" & dan.Offset(0, 2) & ".jpg"
    Name s1 As s2
End If
tu = Dir
Loop Until tu = ""
End Sub

可实现没有重复名字的为张三_222222,有重复名字的为张三_222222_1,_2,  也就是没有重复名字的不后缀序号,有重复名字的才会后缀序号。刚测试了,没问题。


评分

参与人数 1无忧币 +5 收起 理由
freesoft00 + 5

查看全部评分

回复

使用道具 举报

22#
发表于 2024-2-27 11:34:19 | 只看该作者
感谢分享好东东
回复

使用道具 举报

21#
发表于 2024-2-27 10:52:38 | 只看该作者
谢谢分享!收藏了
回复

使用道具 举报

20#
发表于 2024-2-27 10:09:49 | 只看该作者
来看看解决方案
回复

使用道具 举报

19#
发表于 2024-2-27 10:02:11 | 只看该作者
按身份证关联即可,不需要findstr
回复

使用道具 举报

18#
 楼主| 发表于 2024-2-27 09:12:59 | 只看该作者
nttwqz 发表于 2024-2-27 00:17
没这必要,工号又不会重。

for /f "skip=1 tokens=1-4 delims=," %%a in ('type ming.csv') do for /f "delims=" %%A in ('dir /a /b "%%a_*.jpg" 2^>nul') do echo ren "%%A" %%a_%%c.jpg

我昨天实际的代码,dir没有跟身份证,只限定了姓名,所以会有重复。
按你的这个ming.csv文件如果有提供身份证信息,那么是不会有重复的
回复

使用道具 举报

17#
 楼主| 发表于 2024-2-27 09:10:24 | 只看该作者
本帖最后由 freesoft00 于 2024-2-27 09:16 编辑
likeyouli 发表于 2024-2-26 23:55
不用批处理用vba可以吗??用vba应该可以给重名的增个序号,如果行明天我试试,还有姓名_工号不会同时有 ...

工号不会重复,只有名字会,用什么工具或者代码都可以,只要完成任务什么都可以

点评

Sub wuyouchuti() Dim t As Workbook, str, dan As Range Set t = Workbooks.Open("D:\ming.csv") '这里根据实际更改,要求ming.csv和图片必须在同一目录。 '以下代码对ming.csv拆列,要求表格的a列为姓名,性别  详情 回复 发表于 2024-2-27 11:38
回复

使用道具 举报

16#
发表于 2024-2-27 09:08:49 | 只看该作者
学习学习
回复

使用道具 举报

15#
发表于 2024-2-27 08:48:41 | 只看该作者
感謝你的分享
回复

使用道具 举报

14#
发表于 2024-2-27 08:35:15 | 只看该作者
进来学习下
回复

使用道具 举报

13#
发表于 2024-2-27 07:47:47 | 只看该作者
感谢各位大佬,我也需要
回复

使用道具 举报

12#
发表于 2024-2-27 07:22:24 | 只看该作者
nttwqz 发表于 2024-2-26 22:09
其实有很多批量命名软件的,ming必须ansi编码

很给力!
回复

使用道具 举报

11#
发表于 2024-2-27 07:21:03 | 只看该作者
gy0715 发表于 2024-2-26 21:49
1.打开MiniRenamer选择文件夹,勾选文本模式,把文件名复制到excel
2.把ming.txt内容复制到excel
3.把上 ...

赞一个!
回复

使用道具 举报

10#
发表于 2024-2-27 07:18:52 | 只看该作者
赞,谢谢分享。
回复

使用道具 举报

9#
发表于 2024-2-27 00:17:02 | 只看该作者

没这必要,工号又不会重。

点评

for /f "skip=1 tokens=1-4 delims=," %%a in ('type ming.csv') do for /f "delims=" %%A in ('dir /a /b "%%a_*.jpg" 2^>nul') do echo ren "%%A" %%a_%%c.jpg 我昨天实际的代码,dir没有跟身份证,只限定了姓  详情 回复 发表于 2024-2-27 09:12
回复

使用道具 举报

8#
发表于 2024-2-26 23:55:28 | 只看该作者
本帖最后由 likeyouli 于 2024-2-27 00:04 编辑

不用批处理用vba可以吗??用vba应该可以给重名的增个序号,如果行明天我试试,还有姓名_工号不会同时有重复的吧,如果有就必须得增个序号了

点评

工号不会重复,只有名字会  详情 回复 发表于 2024-2-27 09:10
回复

使用道具 举报

7#
 楼主| 发表于 2024-2-26 22:42:28 | 只看该作者
nttwqz 发表于 2024-2-26 22:09
其实有很多批量命名软件的,ming必须ansi编码

改名软件,我测试了advanced_renamer,也许是不太会用,没有弄成
回复

使用道具 举报

6#
 楼主| 发表于 2024-2-26 22:37:15 | 只看该作者
gy0715 发表于 2024-2-26 21:49
1.打开MiniRenamer选择文件夹,勾选文本模式,把文件名复制到excel
2.把ming.txt内容复制到excel
3.把上 ...

这个软件第一次用,文本模式算是这个特色,但是你说的excel文档中的步骤没有太明白

另外,它的文本模式不支持按alt,按列模式选择删除或者输入内容,如果可以会更方便些
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-15 19:52

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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