批量文件重命名 的小程序_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2375 | 回复: 0   主题: 批量文件重命名 的小程序        下一篇 
    本主题由 koei123 于 2015-6-1 15:09:19 移动
liandong
注册用户
等级:新兵
经验:51
发帖:61
精华:0
注册:2011-11-14
状态:离线
发送短消息息给liandong 加好友    发送短消息息给liandong 发消息
发表于: IP:您无权察看 2015-4-1 11:01:29 | [全部帖] [楼主帖] 楼主

批量文件重命名
很多时候我们会下了很多文件,比如图片文件,下载的文件名字一般都比较乱,我们整理时,使用编号是个不错的选择,比如 1.jpg、2.jpg、3.jpg 等。一个一个重命名在数据量小的时候也无所谓,但是对于上百个文件甚至上千个,希望重命名,这就是件非常麻烦的事了。
这里写了个小程序,使用 UNIX/Linux 下的 api,打开目录,遍历文件,然后一一重命名,按编号递增顺序;这里也让名字的长度一致,比如都是 3 位,这样的话就有 010.jpg、099.jpg 这样的名字(编号前面补空缺的 0 的一个原因是:在我们选择按名字排序的时候,排序结果和编号顺序一致,否则 9.jpg 会在 10.jpg 的后面,自己猜原因,O__O"…)。

为了提供一定的灵活性,目录、文件后缀、起始编号、文件名长度可以通过参数设置。

说明文档
多文件重命名:
功能:将一个文件夹下的所有文件重命名为数字有序的名字,也就是形如 000001.jpg、000002.jpg、000003.jpg、...、001004.jpg、001005.jpg 等;
使用方法:

> rename -h # 查看帮助,或是 rename --help 查看;
> rename D:\\image\\gif .gif 10 3 # 将 D:\image\gif 文件夹下的所有 .gif 文件重命名为 010.gif、011.gif、012.gif ... 等;


注意:

1) 请一定要提供文件夹路径,其中路径中的 \ 要使用两次代表一个 \ ;

2) 其他参数可以省略,默认是文件类型是 .jpg,默认开始数字是 0,默认长度是 6 位;

实例:

1) > rename D:\\image\\gif

重命名目录下的 .jpg 文件;第一个文件名是 000000.jpg;依次递增;

2) > rename D:\\image\\gif .png 1000

重命名目录下的 .png 文件;起始编号是 1000, 也就是第一个文件名字是 001000.png,依次递增;

3) > rename D:\\image\\gif .png 1000 4

重命名目录下的 .png 文件;起始编号是 1000,长度是 4,也就是说第一个文件名字就是 1000.png,依次递增;

源代码

如果是程序猿的话,可能对源码比较感兴趣,否则的话,可能直接的 exe 才有帮助。下面是源代码:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <sys/types.h>
  5. #include <dirent.h>
  6. #define NMAX_FILE_NAME 256
  7. int main (int argc, char*argv [])
  8. {
  9.        constchar*pwd =""; // work directory
  10.        constchar*suffix =".jpg"; // file ext name
  11.        int cur =0; // current number
  12.        int length =6; // new file name length
  13.       
  14.        char old_name [NMAX_FILE_NAME ], new_name [NMAX_FILE_NAME ];
  15.       
  16.        DIR *dir ;
  17.        struct dirent *ent ;
  18.       
  19.        if(argc >=2&&(strcmp(argv [1], "-h")==0 strcmp(argv [1], "--help")==0)){
  20.              printf("prog <directory = > <suffix = .jpg> <start_number = 0> <length = 6> (after = is default value.)\n");
  21.              return0;
  22.        }
  23.        switch(argc ){
  24.              case5:
  25.              length =atoi(argv [4]);
  26.              case4:
  27.              cur =atoi(argv [3]);
  28.              case3:
  29.              suffix = argv [2];
  30.              case2:
  31.              pwd = argv [1];
  32.              default:
  33.              break;
  34.        }
  35.       
  36.        if(dir = opendir (pwd )){
  37.              while(ent = readdir (dir )){
  38.                    //printf("%s\n", ent->d_name); // one file name
  39.                    if(strstr(ent ->d_name, suffix )!=NULL){ // is specific file ?
  40.                          sprintf(old_name, "%s\\%s", pwd, ent ->d_name ); // get old name
  41.                          sprintf(new_name, "%s\\%0*d%s", pwd, length, cur ++, suffix ); // get new name
  42.                          printf("%s %s\n", old_name, new_name );
  43.                          if(rename(old_name, new_name )!=0){
  44.                                perror("rename failed ! ");
  45.                          }
  46.                    }
  47.              }
  48.              closedir (dir );
  49.        }else{
  50.        perror("directory open failed ! ");
  51.        return1;
  52.  }
  53.  return0;
  54. }



--转自 北京联动北方科技有限公司

该贴由koei123转至本版2015-6-1 15:09:19



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论