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

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

已解决,谢谢二楼

TOP

  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. }
复制代码
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

本帖最后由 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
复制代码

TOP

返回列表