Seven Yu @ 01/09/2010 (12:15 am)

利用 jsfl 批量重命名 Flash IDE 库中元件 (依据上级文件夹名)

Tags: , , ::

最近一直在折腾 flash lite 项目, 每次导入从美工那拿来的新素材都很杯具, 因为总是遇到重名元件 (你知道, 在美工那元件名永远都是 Symbol 1, 2, 3... )

为了解决这一问题, 凭记忆找到了一篇 用 jsfl 随机命名 Flash 库中的所有元件 的文章 (来自: 杜增强.COM ), 效果不错, 用法简单 (详见原文).

但是, 但咱做程序员的, 多少都有那么点洁癖, 看着 library 里一堆以随机数命名的元件始终是不舒服.
于是动手改造了一下, 让元件依据父级文件夹来命名, 并添加后缀, 源码如下:

PLAIN TEXT >> JAVASCRIPT:
  1. (function()
  2. {
  3.     var tmpdata = {};
  4.     var folder_cnt = 0, file_cnt = 0;
  5.     var items = fl.getDocumentDOM().library.items;
  6.     var prex =
  7.     {
  8.         'movie clip': 'mc',
  9.         'button': 'btn',
  10.         'graphic': 'gc',
  11.         'bitmap': 'img',
  12.         'sound': 'snd',
  13.         'compiled clip': 'com'
  14.     };
  15.  
  16.     for(var i in items)
  17.     {
  18.         var obj = items[i];
  19.         var pathinfo = obj.name.split('/');
  20.         var realname = pathinfo.pop();
  21.         var realpath = pathinfo.join('/') || '_G_L_O_B_A_L_';
  22.         var myfolder = pathinfo.pop() || 'nofolder';
  23.         var id = tmpdata[realpath] || 1;
  24.  
  25.         if(obj.itemType !== 'folder')
  26.         {
  27.             var pre = prex[obj.itemType] || 'uk';
  28.             obj.name = myfolder + '_' + id + '_' + pre;
  29.             tmpdata[realpath] = ++id;
  30.             file_cnt++;
  31.         }
  32.         else
  33.         {
  34.             folder_cnt++;
  35.         }
  36.     }
  37.     fl.trace('Rename completed!\n' + folder_cnt + ' folder(s) and ' + file_cnt + ' symbol(s)');
  38. })();

保存为 rename.jsfl 文件, 执行 flash 菜单中 Commands -> Run Command... 项, 选择 rename.jsfl 文件打开即可.

效果如图:
jsfl_rename