博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
批量给文件或者文件夹重命名
阅读量:7113 次
发布时间:2019-06-28

本文共 3053 字,大约阅读时间需要 10 分钟。

在给文件重命名的时候如果当前文件夹中已有该名字,重命名就会失败,如果一个文件夹中有很多文件,现在需要给这些文件重命名,这些名字其中有很多已经包含了,也有一些是新的。手动去重命名是非常困难的,需要把当前文件夹中所有文件一个一个复制到一个新文件夹,一个一个去重新命名,全部弄完了,把源文件夹清空,再把已经重命名的文件重新复制到原来的文件夹。手动可以完成,但是非常麻烦,如果程序也这样去做就得让程序去开辟一个缓存文件夹,一个一个copy文件到缓存文件夹重命名,全部完成把源文件夹清空,再把缓存文件夹中文件copy到源文件夹,结束再删除缓存文件夹,效率低下且麻烦。下面提供一个思路。文件不能重命名是因为与已有文件名相同而冲突,这样我们可以在重命名之前,找到已有的具有相同文件名的文件把它名字改掉再重命名我们要的文件。举例有文件A,B存在于某一个文件夹,现在需要把A文件取名为B,把B文件取名为A,操作方法为:将B文件重命名为tempB,这时候该文件夹有两个文件为A和tempB,再将A重命名为B,这时候文件夹包含B,tempB,再将tempB重命名为A,这时候便将文件名交换了,如同数组里边交换数据的远离。对于含有大量的文件的文件夹也类似于数组交换排序的方式去重命名,两两交换,直到最后一个就把所有文件按照预期重命名了,下面提供一个方法:

View Code
1         ///  2         /// 文件或文件夹批量重命名 3         ///  4         /// 当前文件名数组 5         /// 命名后的文件名数组 6         private void ReNameFileQuantity(string[] oldPath, string[] newPath) 7         { 8             for (int i = 0; i < oldPath.Length; i++) 9             {10                 string oldName = oldPath[i];11                 string newName = newPath[i];12                 string st = System.IO.Path.GetExtension(oldName);13                 if (oldPath.Contains(newName))14                 {15                     int index = 0;16                     for (int k = 0; k < oldPath.Length; k++)17                     {18                         if (oldPath[k] == newName)19                         {20                             index = k;21                         }22                     }23                     if (index != i)24                     {25                         oldPath[i] = newName;26                         oldPath[index] = oldName;27                         if (st == string.Empty)//文件夹目录重命名28                         {29                             st = System.IO.Path.GetDirectoryName(newName) + "\\#CacheImage_JimmyBright#";30                             Directory.Move(newName, st);31                             Directory.Move(oldName, newName);32                             Directory.Move(st, oldName);33                         }34                         else//文件重命名35                         {36                             st = System.IO.Path.GetDirectoryName(newName) + "\\#CacheImage_JimmyBright#" + System.IO.Path.GetExtension(oldName);37                             File.Move(newName, st);38                             File.Move(oldName, newName);39                             File.Move(st, oldName);40                         }41                     }42                 }43                 else44                 {45                     if (st == string.Empty)//文件夹目录重命名46                     {47                         Directory.Move(oldName, newName);48                     }49                     else50                     {51                         File.Move(oldName, newName);52                     }53                 }54             }55         }

例如某个文件夹拥有如下一些图片:

每个图片的名字和对应的上面的编号不一样,现在就可以通过上面的方法把已有的文件名作为数组1.jpg,2.jpg,3.jpg,4.jpg,5.jpg,6.jpg,7.jpg,8.jpg,9.jpg,10.jpg

需要重新命名的顺序为:4.jpg,5.jpg,10.jpg,6.jpg,2.jpg,8.jpg,1.jpg,7.jpg,9.jpg,3.jpg

传入这两个数组结果为:

转载于:https://www.cnblogs.com/JimmyBright/archive/2012/07/24/JimmyBright.html

你可能感兴趣的文章
[转载]ASP.NET伪静态页面的实现和伪静态在IIS7.0中的配置
查看>>
【转】Android源代码编译命令m/mm/mmm/make分析--不错
查看>>
C语言中不定参数函数的使用
查看>>
Ubuntu - No space left on device Is it a lie or have I run out of inodes
查看>>
解决Agent admitted failure to sign using the kye with ssh
查看>>
Linux Doxygen的安装和使用
查看>>
android adb介绍
查看>>
【SQL】SQL中笛卡尔积、内连接、外连接的数据演示
查看>>
HTTP解析
查看>>
MemCache超详细解读
查看>>
python numpy 教程
查看>>
手机web如何实现多平台分享
查看>>
策略模式和观察者模式
查看>>
详解CALayer 和 UIView的区别和联系
查看>>
eclipse中报错:java.lang.OutOfMemoryError: Java heap space
查看>>
Ubuntu 16.04 grub rescue 模式下修复 grub
查看>>
【Spring】24、<load-on-startup>0</load-on-startup>配置
查看>>
L0 Regularization
查看>>
使用JDBC向Kudu表插入中文数据乱码(转载)
查看>>
spf13-vim安装与使用
查看>>