无忧启动论坛

标题: 批处理改名 [打印本页]

作者: freesoft00    时间: 2024-2-26 20:51
标题: 批处理改名
文件夹内都是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个命令可以


作者: gy0715    时间: 2024-2-26 21:49
1.打开MiniRenamer选择文件夹,勾选文本模式,把文件名复制到excel
2.把ming.txt内容复制到excel
3.把上面两列数据对应上
4.把排序后的新文件名复制到MiniRenamer,执行改名。
作者: nttwqz    时间: 2024-2-26 22:09
  1. @echo off
  2. pushd %~dp0
  3. for /f "tokens=1-4 delims=," %%a in ('type ming.txt') do for /f "delims=" %%A in ('dir /a /b "%%a_*_%%d.jpg" 2^>nul') do ren "%%A" %%a_%%c.jpg
  4. pause
复制代码


其实有很多批量命名软件的,ming必须ansi编码
作者: freesoft00    时间: 2024-2-26 22:24
测试.zip (248.45 KB, 下载次数: 11)
上传了一个测试文档,按照ming.csv来改名,一楼写的是ming.txt,测试文档实际是ming.csv,这个不影响的,知道意思就行了

作者: freesoft00    时间: 2024-2-26 22:35
nttwqz 发表于 2024-2-26 22:09
其实有很多批量命名软件的,ming必须ansi编码

可以了


有一个另外的问题不知道是否能解决。

ming.txt(也就是下面的附件中的ming.csv)其中的姓名是有重名的,这样批量改的话,遇到重名的是否可以递增一个数字序列比如 张三_222222_1    张三_222222_2

不好弄就不考虑这个问题。

主要是ming.txt改名文档中,其中没有身份证列,如果有这个话,过滤就不会有重复的啦。
作者: freesoft00    时间: 2024-2-26 22:37
gy0715 发表于 2024-2-26 21:49
1.打开MiniRenamer选择文件夹,勾选文本模式,把文件名复制到excel
2.把ming.txt内容复制到excel
3.把上 ...

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

另外,它的文本模式不支持按alt,按列模式选择删除或者输入内容,如果可以会更方便些
作者: freesoft00    时间: 2024-2-26 22:42
nttwqz 发表于 2024-2-26 22:09
其实有很多批量命名软件的,ming必须ansi编码

改名软件,我测试了advanced_renamer,也许是不太会用,没有弄成
作者: likeyouli    时间: 2024-2-26 23:55
本帖最后由 likeyouli 于 2024-2-27 00:04 编辑
freesoft00 发表于 2024-2-26 22:35
可以了

不用批处理用vba可以吗??用vba应该可以给重名的增个序号,如果行明天我试试,还有姓名_工号不会同时有重复的吧,如果有就必须得增个序号了
作者: nttwqz    时间: 2024-2-27 00:17
freesoft00 发表于 2024-2-26 22:35
可以了

没这必要,工号又不会重。
作者: oh312    时间: 2024-2-27 07:18
赞,谢谢分享。
作者: yyz2191958    时间: 2024-2-27 07:21
gy0715 发表于 2024-2-26 21:49
1.打开MiniRenamer选择文件夹,勾选文本模式,把文件名复制到excel
2.把ming.txt内容复制到excel
3.把上 ...

赞一个!
作者: yyz2191958    时间: 2024-2-27 07:22
nttwqz 发表于 2024-2-26 22:09
其实有很多批量命名软件的,ming必须ansi编码

很给力!
作者: 2012mulinsen    时间: 2024-2-27 07:47
感谢各位大佬,我也需要
作者: reninhouse    时间: 2024-2-27 08:35
进来学习下
作者: yuguotqing    时间: 2024-2-27 08:48
感謝你的分享
作者: 2012dariuscn    时间: 2024-2-27 09:08
学习学习
作者: freesoft00    时间: 2024-2-27 09:10
本帖最后由 freesoft00 于 2024-2-27 09:16 编辑
likeyouli 发表于 2024-2-26 23:55
不用批处理用vba可以吗??用vba应该可以给重名的增个序号,如果行明天我试试,还有姓名_工号不会同时有 ...

工号不会重复,只有名字会,用什么工具或者代码都可以,只要完成任务什么都可以
作者: freesoft00    时间: 2024-2-27 09:12
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文件如果有提供身份证信息,那么是不会有重复的

作者: szwp    时间: 2024-2-27 10:02
按身份证关联即可,不需要findstr
作者: tanglf    时间: 2024-2-27 10:09
来看看解决方案
作者: eone1984    时间: 2024-2-27 10:52
谢谢分享!收藏了
作者: promrhxq    时间: 2024-2-27 11:34
感谢分享好东东
作者: likeyouli    时间: 2024-2-27 11:38
本帖最后由 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,  也就是没有重复名字的不后缀序号,有重复名字的才会后缀序号。刚测试了,没问题。



作者: sxxyjszxmzj    时间: 2024-2-27 16:31
进来学习
作者: daixq021    时间: 2024-2-27 19:27
楼主:很早以前我从好压软件里面提取制作的批“量改名”单文件版工具,能够满足你的使用需求。把下面的中文文字删除之后就可以登陆网盘下载了
https:删//pan.baidu.除com/s/删1m9Z1z-kNhdClYOBo2NVEzg?pwd除=2yg5
作者: wskxwypl    时间: 2024-2-27 19:53

赞,谢谢分享。
作者: wang1126    时间: 2024-2-28 05:45
学习学习
作者: 2012myjoys    时间: 2024-2-28 08:10
学习学习
作者: swc1209    时间: 2024-3-4 19:00
advancerename
作者: dos时代菜鸟    时间: 2024-3-4 20:28
本帖最后由 dos时代菜鸟 于 2024-3-4 20:29 编辑

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

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








作者: dos时代菜鸟    时间: 2024-3-4 21:14
本帖最后由 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 。










作者: freesoft00    时间: 2024-3-4 23:13
dos时代菜鸟 发表于 2024-3-4 21:14
原来 原始 ming.csv 中没有 身份证号,那就换个思路。

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

嗯,有身份证号的话不会重复,它们可能做文档的时候没有弄上去,所以前面的批处理就会有重名的情况。
这些都留着,测试测试
作者: Monkeydance    时间: 2024-3-5 17:49
很实用的
作者: 紧急追踪    时间: 2024-3-9 20:17
感谢分享




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3