找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26964|回复: 8

[文件操作] [已解决]批处理如何将文件夹内的文件按给定的重命名?

[复制链接]
发表于 2019-4-22 22:23:19 | 显示全部楼层 |阅读模式
本帖最后由 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

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2019-4-22 23:20:30 | 显示全部楼层
本帖最后由 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
复制代码

评分

参与人数 1技术 +1 收起 理由
czvde + 1 谢谢

查看全部评分

 楼主| 发表于 2019-4-23 00:40:38 | 显示全部楼层
本帖最后由 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

如何实现?
发表于 2019-4-23 01:51:38 | 显示全部楼层
回复 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. }
复制代码
发表于 2019-4-23 02:37:34 | 显示全部楼层
回复 3# czvde

我测试时结果是这样,不知你贴出的结果哪里来的
已增加了4位大写字符
话说,要是超过100,数值怎么表示
 楼主| 发表于 2019-4-23 03:12:38 | 显示全部楼层
本帖最后由 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

需要如何修改?
发表于 2019-4-23 11:07:39 | 显示全部楼层
回复 6# czvde

大概我用到了假系统
 楼主| 发表于 2019-4-23 12:14:19 | 显示全部楼层
本帖最后由 czvde 于 2019-4-23 12:16 编辑

回复 7# zaqmlp


谢谢
发表于 2019-4-23 12:26:19 | 显示全部楼层
回复 8# czvde

赞助实际点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 05:12 , Processed in 0.020878 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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