Board logo

标题: 20求助批量更改文件名 [打印本页]

作者: chong08    时间: 2019-12-17 14:19     标题: 20求助批量更改文件名

具体报酬:20元
支付方式:支付宝
联系方式:QQ22210509
有效期限:无
需求描述:
(1)系统环境windows
(2)想要实现的功能的具体描述:做个bat文件。
将文件夹下包括子文件夹的tif文件名识别提取字符更名。
最终文件名为{名称}{序号}{当前日期}{色别}.tif
其中名称和序号留空行,方便我加入其他样本。
再次感谢。
源文件名:
16_13_光明日报-a2-a3_v00_1200_61240_Black.tif
16_13_光明日报-a2-a3_v00_1200_61240_Cyan.tif
16_13_光明日报-a2-a3_v00_1200_61240_Magenta.tif
16_13_光明日报-a2-a3_v00_1200_61240_Yellow.tif
16_13_光明日报-a10-a11_v00_1200_61240_Black.tif
16_13_光明日报-a10-a11_v00_1200_61240_Cyan.tif
16_13_光明日报-a10-a11_v00_1200_61240_Magenta.tif
16_13_光明日报-a10-a11_v00_1200_61240_Yellow.tif
18_15_第一财经-9-12_v00_1200_60588_Black.tif
18_15_第一财经-9-12_v00_1200_60588_Cyan.tif
18_15_第一财经-9-12_v00_1200_60588_Magenta.tif
18_15_第一财经-9-12_v00_1200_60588_Yellow.tif
18_15_第一财经-13-16_v00_1200_60588_Black.tif
18_15_第一财经-13-16_v00_1200_60588_Cyan.tif
18_15_第一财经-13-16_v00_1200_60588_Magenta.tif
18_15_第一财经-13-16_v00_1200_60588_Yellow.tif

修改后文件名:
gmrb-002-20191215-c.tif
gmrb-002-20191215-k.tif
gmrb-002-20191215-m.tif
gmrb-002-20191215-y.tif
gmrb-010-20191215-c.tif
gmrb-010-20191215-k.tif
gmrb-010-20191215-m.tif
gmrb-010-20191215-y.tif
dycj-009-20191215-c.tif
dycj-009-20191215-k.tif
dycj-009-20191215-m.tif
dycj-009-20191215-y.tif
dycj-013-20191215-c.tif
dycj-013-20191215-k.tif
dycj-013-20191215-m.tif
dycj-013-20191215-y.tif
作者: a20150604    时间: 2019-12-17 15:28

本帖最后由 a20150604 于 2019-12-17 15:36 编辑

回复 1# chong08
  1. Rem^ & @echo off & mode 300,9999
  2. Rem^ &cscript //NoLogo //E:VBScript "%~f0"
  3. Rem^ &pause
  4. Rem^ &goto :eof
  5. Public yyyyMMdd
  6. Call main
  7. Sub main()
  8.     dttm = Now
  9.     yyyyMMdd = Year(dttm) & "" & Right("0" & Month(dttm), 2) & "" & Right("0" & Day(dttm), 2)
  10.     Set fso = CreateObject("Scripting.FileSystemObject")
  11.     ' 脚本对象 和 当前目录
  12.     Set obj_wsc_shell = CreateObject("wscript.shell")
  13.     HostFolder = obj_wsc_shell.CurrentDirectory & "\"
  14.     ' HostFolder = ThisWorkbook.Path & "\"
  15.     Call DoFolder(fso.GetFolder(HostFolder))
  16.     wscript.Quit
  17. End Sub
  18. Sub DoFolder(Folder)
  19.     ' 在子目录中递归调用
  20.     Dim SubFolder
  21.     For Each SubFolder In Folder.SubFolders
  22.         Call DoFolder(SubFolder)
  23.     Next
  24.     Dim file
  25.     For Each file In Folder.Files
  26.         Call doFile(file)
  27.     Next
  28. End Sub
  29. Sub doFile(ByRef input_file)
  30.     ' 分解获取 文件名 和 扩展名
  31.     If InStr(input_file.Name, ".") > 0 Then
  32.         arr = Split(input_file.Name, ".")
  33.         ext_name = UCase(arr(UBound(arr)))
  34.         dot_ext_name = "." & ext_name
  35.     Else
  36.         ext_name = ""
  37.         dot_ext_name = ""
  38.     End If
  39.     ' 跳过 非 TIF 文件
  40.     If Not ("TIF" = ext_name) Then
  41.         Exit Sub
  42.     End If
  43.    
  44.     file_name = Left(input_file.Name, Len(input_file.Name) - Len(dot_ext_name))
  45.    
  46.     Dim regEx
  47.     Set regEx = New RegExp
  48.     regEx.Pattern = "\d+_\d+_([^\-\s]+)-[^\d]*(\d+)[\s\S]*(Yellow|Black|Cyan|Magenta)"
  49.     regEx.IgnoreCase = True
  50.     Rem regEx.Global = True
  51.     wscript.echo "file_name:" & file_name
  52.     Set oMatches = regEx.Execute(file_name)
  53.     If oMatches.Count > 0 Then
  54.         Set oMatch = oMatches(0)
  55.         wscript.echo "file_name:" & file_name & " 0:" & oMatch.SubMatches(0) & " 1:" & oMatch.SubMatches(1) & " 2:" & oMatch.SubMatches(2)
  56.         new_name = ""
  57.         Select Case oMatch.SubMatches(0)
  58.             Case "光明日报"
  59.                 new_name = new_name & "gmrb" & "-"
  60.             Case "第一财经"
  61.                 new_name = new_name & "dycj" & "-"
  62.         End Select
  63.         new_name = new_name & Right("00" & oMatch.SubMatches(1), 3) & "-" & yyyyMMdd
  64.         Select Case UCase(oMatch.SubMatches(2))
  65.             Case "BLACK"
  66.                 new_name = new_name & "-" & "k"
  67.             Case "CYAN"
  68.                 new_name = new_name & "-" & "c"
  69.             Case "MAGENTA"
  70.                 new_name = new_name & "-" & "m"
  71.             Case "YELLOW"
  72.                 new_name = new_name & "-" & "y"
  73.         End Select
  74.         wscript.echo new_name
  75.         input_file.Name = new_name & dot_ext_name
  76.     Else
  77.         wscript.echo input_file.Path & " 解析失败"
  78.     End If
  79. End Sub
复制代码

作者: zaqmlp    时间: 2019-12-17 16:01

  1. <# :
  2. cls
  3. @echo off
  4. set info=互助互利,支付宝扫码头像,感谢赞助
  5. rem 有问题,可加QQ956535081及时沟通
  6. title %info%
  7. set "rootpath=%~dp0"
  8. if "%rootpath:~-1%" equ "\" (set "rootpath=%rootpath:~,-1%")
  9. cd /d "%rootpath%"
  10. powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::Default))) -Args '%rootpath%'"
  11. echo;%info%
  12. pause
  13. exit
  14. #>
  15. $name='';
  16. $number='';
  17. $web=New-Object System.Net.WebClient;
  18. $web.Encoding=[Text.Encoding]::UTF8;
  19. $html=$web.DownloadString('http://csstools.chinaz.com/tools/js/pinyin.js');
  20. $m=[regex]::match($html, 'var pydic ?= ?"([^\"]+)"');
  21. $pydic='';
  22. if($m.success){
  23.     $pydic=$m.groups[1].value;
  24. }else{
  25.     write-host 'dict failed';
  26.     exit;
  27. };
  28. $date=get-date;
  29. $fs=@(dir -liter $args[0] -recurse|?{('.tif' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])});
  30. for($i=0;$i -lt $fs.length;$i++){
  31.     $m=[regex]::match($fs[$i].BaseName,'^[^_-]+_[^_-]+_([^_-]+)-([^_-]+)-[^_-]+(?:_[^_-]+){3}_([^_-]+)$');
  32.     if($m.Success){
  33.         $oldname=$fs[$i].Name;
  34.         $a='';
  35.         $fname=$m.groups[1].value;
  36.         for($j=0;$j -lt $fname.length;$j++){
  37.             $n=$pydic.indexOf($fname[$j]);
  38.             if($fname[$j] -match '[\u4e00-\u9fa5]'){
  39.                 if($n -ge 0){
  40.                     $t=$pydic.Substring($n+1,1);
  41.                     $t=($t -replace '[āáǎà]','a') -replace '[ōóǒò]','o';
  42.                     $t=($t -replace '[ēéěè]','e');
  43.                     $a+=$t;
  44.                 };
  45.             }else{$a+=$fname[$j]};
  46.         };
  47.         $b=($m.groups[2].value -replace '^\D*','').PadLeft(3,'0');
  48.         $c=$date.toString('yyyyMMdd');
  49.         $d=$m.groups[3].value.Substring(0,1);
  50.         $newname=$name+$a+'-'+$number+$b+'-'+$c+'-'+$d.toLower()+$fs[$i].Extension;
  51.         if($newname -ne $oldname){
  52.             write-host ($fs[$i].FullName+' --> '+$newname);
  53.             mv -liter $fs[$i].FullName ($fs[$i].Directory.FullName+'\'+$newname);
  54.         };
  55.     };
  56. }
复制代码

作者: chong08    时间: 2019-12-17 18:20

已解决,谢谢二楼




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2