Board logo

标题: [文件操作] [已解决]批处理如何将文件夹内的文件按给定的重命名? [打印本页]

作者: czvde    时间: 2019-4-22 22:23     标题: [已解决]批处理如何将文件夹内的文件按给定的重命名?

本帖最后由 czvde 于 2019-4-23 12:14 编辑

求助各位大绅

我文件夹内有一批文件如下:
zzfabc-1.txt
zzfabc-2.txt
.......
zzfabc-67.txt

如何用批处理批量重命名成如下:
[67_01_A]zzfabc-1.txt
[67_02]zzfabc-2.txt
.......
[67_67_B]zzfabc-67.txt
作者: zaqmlp    时间: 2019-4-22 23:20

本帖最后由 zaqmlp 于 2019-4-23 02:45 编辑
  1. @echo off
  2. mode con lines=3000
  3. set info=互助互利,支付宝扫码头像,感谢赞助
  4. rem 有问题,可加QQ956535081及时沟通
  5. title %info%
  6. cd /d "%~dp0"
  7. powershell ^
  8.     $list=dir *-*.txt^|?{$_ -is [System.IO.FileInfo]}^|group {$_.BaseName -replace '\d+$'};^
  9.     foreach($item in $list){^
  10.         $arr=@($item.group^|sort {[int]($_.BaseName -replace '^^.+-','')});^
  11.         $max=$arr[$arr.length-1].BaseName -replace '^^.+-','';^
  12.         for($i=0;$i -lt $arr.length;$i++){^
  13.             $num=$arr[$i].BaseName -replace '^^.+-','';^
  14.             $four=-join(($arr[$i].BaseName.split('-')[0])[-4..-1]);^
  15.             $str='['+$max.PadLeft(2,'0')+'_'+$num.PadLeft(2,'0');^
  16.             if($i -eq 0){^
  17.                 $str+='_A]';^
  18.             }else{^
  19.                 if($i -eq ($arr.length-1)){^
  20.                     $str+='_B]';^
  21.                 }else{^
  22.                     $str+=']';^
  23.                 };^
  24.             };^
  25.             write-host ($arr[$i].Name+' --^> ['+$four.toUpper()+']'+$str+$arr[$i].Name);^
  26.             mv -liter $arr[$i].Name ('['+$four.toUpper()+']'+$str+$arr[$i].Name);^
  27.         };^
  28.     }
  29. echo;%info%
  30. pause
复制代码

作者: czvde    时间: 2019-4-23 00:40

本帖最后由 czvde 于 2019-4-23 03:30 编辑

回复 2# zaqmlp

在你的批处理原基础如何再增加一个提取原文件名中“-”的前面4个字符的重命名,字母要求大写 效果如下:
[F1BC][04_01_A]edf1bc-1.txt
[F1BC][04_02]edf1bc-2.txt
[F1BC][04_03]edf1bc-3.txt
[F1BC][04_04_B]edf1bc-4.txt
[1D8U][74_01_A]zxy1d8u-1.txt
[1D8U][74_02]zxy1d8u-2.txt
[1D8U][74_03]zxy1d8u-3.txt
.......
[1D8U][74_74_B]zxy1d8u-74.txt

如何实现?
作者: yhcfsr    时间: 2019-4-23 01:51

回复 3# czvde


   
保存为bat与处理文件放一起
测试前请备份文件
  1. @Powershell "& {[ScriptBlock]::Create("'#' + ([io.file]::ReadAllText('%~f0',[text.encoding]::Default))").Invoke()}" & pause & exit
  2. $files = Get-ChildItem  -Path .\* -Include *.txt;
  3. $count = $files.Count;
  4. $lastFile='';
  5. $dic = New-Object -TypeName 'System.Collections.Generic.Dictionary[string,object]'
  6. #文件按基名前缀分组
  7. foreach($file in $files)
  8. {
  9.     if($file.BaseName -match '^(.*?)-(\d+)$')
  10.     {
  11.          if(-not $dic.ContainsKey($Matches[1])){
  12.             $dic.Add($Matches[1],[System.Collections.ArrayList] @([int] $Matches[2]));
  13.          }
  14.          else {
  15.             [void] $dic[$Matches[1]].Add([int] $Matches[2]);
  16.          }
  17.     }
  18.    
  19. }
  20. #组内文件按基名后缀排序
  21. foreach($key in $dic.Keys)
  22. {
  23.     $count=$dic[$key].Count;
  24.     $counter=0;
  25.     foreach($index in ($dic[$key]|sort))
  26.     {
  27.       
  28.        switch(++$counter)
  29.        {
  30.         1       {$subfix = '_A';break;}
  31.         $count  {$subfix = '_B';break;}
  32.         default {$subfix = '';break;}
  33.        }
  34.        [string] $num=$index;
  35.        if($index -lt 10) {$num="{0:00}" -f $index}
  36.        if($key -match '(\w{4})$'){
  37.             ren "$key-$index.txt" "[$($Matches[1].ToUpper())][$count-$num$subfix]$key-$index.txt"
  38.        }
  39.         
  40.     }
  41. }
复制代码

作者: zaqmlp    时间: 2019-4-23 02:37

回复 3# czvde

我测试时结果是这样,不知你贴出的结果哪里来的
已增加了4位大写字符
话说,要是超过100,数值怎么表示
作者: czvde    时间: 2019-4-23 03:12

本帖最后由 czvde 于 2019-4-23 12:16 编辑

回复 5# zaqmlp


你的批处理运行结果是:
[F1BC][4_1_A]edf1bc-1.txt
[F1BC][4_2]edf1bc-2.txt
[F1BC][4_3]edf1bc-3.txt
[F1BC][4_4_B]edf1bc-4.txt


我希望运行结果是:
[F1BC][04_01_A]edf1bc-1.txt
[F1BC][04_02]edf1bc-2.txt
[F1BC][04_03]edf1bc-3.txt
[F1BC][04_04_B]edf1bc-4.txt

需要如何修改?
作者: zaqmlp    时间: 2019-4-23 11:07

回复 6# czvde

大概我用到了假系统
作者: czvde    时间: 2019-4-23 12:14

本帖最后由 czvde 于 2019-4-23 12:16 编辑

回复 7# zaqmlp


谢谢
作者: zaqmlp    时间: 2019-4-23 12:26

回复 8# czvde

赞助实际点




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