shawind 发表于 2009-12-16 16:35:26

文件排序批量改名兼中文乱用


import std.file;
import std.path;
import std.string;
import std.stdio;

long 获取创建时间(char[] 文件路径)
{
    long 创建时间;
    long 访问时间;
    long 修改时间;
    getTimes(文件路径, 创建时间, 访问时间, 修改时间);
    return 创建时间;
}

struct 时间旧新文件名
{
    long 创建时间;
    char* 旧文件名;
    char* 新文件名;
}

void main(char[][] args)
{
    if(args.length != 2)
    {
      printf("sample:\n>>rfl \"ff7\"\n>>ff7-map.mid => 06-map.mid");
      return;
    }
   
    char[][] 临时文件列表 = listdir(getcwd());

    时间旧新文件名[] 文件列表;
    时间旧新文件名[] 新文件列表;

    foreach(char[] 文件名; 临时文件列表)
    {
      时间旧新文件名 t;
      t.创建时间 = 获取创建时间(文件名);
      t.旧文件名 = toStringz(文件名);
      t.新文件名 = toStringz(文件名);
      文件列表 ~= t;
    }
   
    long[] 临时时间列表;
    foreach(时间旧新文件名 t; 文件列表.sort)
    {
      临时时间列表 ~= ;
    }
    临时时间列表.sort;
   
    foreach(long 时间; 临时时间列表)
    {
      foreach(时间旧新文件名 t; 文件列表)
      {
            if(时间 == t.创建时间 )
            {
                新文件列表 ~= t;
            }
      }
    }
   
    for(uint i = 0; i < 新文件列表.length; i++)
    {
      uint fc = 新文件列表.length;
      char[] t;
      char[] c;
      if(fc>=0 && fc<=9)
      {
            c ~= toString(i+1);
      }
      if(fc>=10 && fc<=99)
      {
            if(i>=0 && i<9)
            {
                c = "0" ~ toString(i+1);
            }
            else
            {
                c ~=toString(i+1);
            }
      }
      if(fc>=100 && fc<=999)
      {
            if(i>=0 && i<9)
            {
                c = "00" ~ toString(i+1);
            }
            else if(i>=9 && i<=99)
            {
                c = "0" ~ toString(i+1);
            }
            else
            {
                c ~= toString(i+1);
            }
      }
      if(fc>=1000 && fc<=9999)
      {
            if(i>=0 && i<9)
            {
                c = "000" ~ toString(i+1);
            }
            else if(i>=9 && i<=99)
            {
                c = "00" ~ toString(i+1);
            }
            else if(i>=99 && i<=999)
            {
                c = "0" ~ toString(i+1);
            }
            else
            {
                c ~= toString(i+1);
            }
      }
      if(fc>9999)
      {
            return;
      }
      t = replace(toString(新文件列表.旧文件名), args, c);
      新文件列表.新文件名 = toStringz(t);
    }
   
    foreach(时间旧新文件名 t; 新文件列表)
    {
      printf("%s\n>> %s\n####################\n", t.旧文件名, t.新文件名);
    }
   
    printf("Please press a key:\ny : rename all\nn : skip all\n");
    switch(getchar())
    {
      case 121:
            foreach(时间旧新文件名 t; 新文件列表)
            {
                printf("%s\n>>%s\n", t.旧文件名, t.新文件名);
                std.file.rename(toString(t.旧文件名),toString(t.新文件名));
            }
            printf(">>>> rename ok!\n");
      break;

      default:
            printf(">> exit program!");
      break;
    }
}

secondsen 发表于 2009-12-16 19:36:29

这是,什么?汉字也能做变量么?

shawind 发表于 2009-12-16 21:58:42

除了关键字外,unicode中的所有字符都可以拿来用。
python 3.x ruby1.9.x....很多语言都可以这么干。

secondsen 发表于 2009-12-16 22:25:21

ruby倒是见着过。。。但是我还是喜欢英文。。。。习惯了
页: [1]
查看完整版本: 文件排序批量改名兼中文乱用