批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
[批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
返回列表 发帖

[文件操作] [已解决]如何在使用批处理重命名时达到一定条件的跳过?

本帖最后由 czvde 于 2019-6-11 13:07 编辑

文件夹内有文件如下:

a12-001.txt
a12-12.txt
a12-13.txt
b12-21.txt
K21231231332D13-131.txt
F33355412B3-131.txt
  1. @echo off
  2. set info=测试
  3. cd /d "%~dp0"
  4. powershell ^
  5.     $list=dir *-*.txt^|?{$_ -is [System.IO.FileInfo]}^|group {$_.BaseName -replace '\d+$'};^
  6.     foreach($item in $list){^
  7.         $arr=@($item.group^|sort {[int]($_.BaseName -replace '^^.+-','')});^
  8.         $min=$arr[0].BaseName -replace '^^.+-','';^
  9.         $max=$arr[$arr.length-1].BaseName -replace '^^.+-','';^
  10.         $len=$max.length;^
  11.         for($i=0;$i -lt $arr.length;$i++){^
  12.             $str='['+$max;^
  13.             if($i -eq 0){^
  14.                 $str+='_00]';^
  15.             }else{^
  16.                 if($i -eq ($arr.length-1)){^
  17.                     $str+='_99]';^
  18.                 }else{^
  19.                     $str+=']';^
  20.                 };^
  21.             };^
  22.             write-host ($arr[$i].Name+' --^> '+$str+$arr[$i].Name);^
  23.             mv -liter $arr[$i].Name ($str+$arr[$i].Name);^
  24.         };^
  25.     }
  26. echo;%info%
  27. pause
复制代码
求助各位大神,如何在这个代码的基础上添加一个文件名到达13字符长度以上文件就跳过重命名,效果如下:


[13_00]a12-001.txt
[13]a12-12.txt
[13_99]a12-13.txt
[21_00]b12-21.txt
K21231231332D13-131.txt
F33355412B3-131.txt

回复 1# czvde
  1. if($arr[$i].Name.length -lt 18) {^
  2.             write-host ($arr[$i].Name+' --^> '+$str+$arr[$i].Name);^
  3.             mv -liter $arr[$i].Name ($str+$arr[$i].Name);^
  4. }^
复制代码
你不是已经写出来了吗?13位不知道有没有包括后缀名呢
1

评分人数

    • czvde: 乐于助人技术 + 1

TOP

回复 2# miqilaosu
不包括后缀名

TOP

本帖最后由 miqilaosu 于 2019-6-11 09:52 编辑

回复 3# czvde


    $arr[$i].Name.length你自己写的这个不就是文件名长度吗,对它加个判断就行,只不过这个里面含有.txt 占了四位,所以就是13+4 共17位,小于17的正常执行,改名字部分的代码就可以了
上边的代码直接替换就行了

TOP

回复 4# miqilaosu

谢谢

TOP

返回列表