Unity三种批量修改文件名的方法

首先,我们写个编辑器下的调用方法

 [MenuItem("插件/批量修改文件名")]
 public static void SetFilesName()
 {
     //todo:这里要加调用的方法体
     AssetDatabase.SaveAssets();
     AssetDatabase.Refresh();
 }

1,修改点击文件夹的文件名

 public static void Click()
 {
     UnityEngine.Object[] m_objects = Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.DeepAssets);//选择的所以对象

     int index = 0;//序号

     foreach (UnityEngine.Object item in m_objects)
     {

         //string m_name = item.name;
         if (Path.GetExtension(AssetDatabase.GetAssetPath(item)) != "")//判断路径是否为空
         {

             string path = AssetDatabase.GetAssetPath(item);

             Debug.Log(path);

             AssetDatabase.RenameAsset(path, index + "" + item.name);//可以替换为修改名
             index++;
         }

     }


 }

调用方法: Click();

2,修改单个文件夹下的文件

    public static void SetFilesName2(string _path,string _id)
    {      

#if UNITY_EDITOR
        //根据需求自己去修改需要修改的资源目录
        string path = Application.dataPath + "/"+_path;
        // 判断给定的目录是否存在  
        if (!System.IO.Directory.Exists(path))
        {
            Debug.Log("目录不存在: " + path);
            return;
        }
        // 返回当前按下目录下的文件列表  
        DirectoryInfo di = new DirectoryInfo(path);
        var files = di.GetFiles();
        var count = 0;
        // 遍历这个目录  
        foreach (var f in files)
        {
            //绕过mate文件
            if (f.Extension == ".meta")
            {
                //f.Delete();
            }
            else
            {
                var _name = f.Name.Replace(f.Extension, "") + _id;
                var _pat2 = f.FullName.Replace("项目所在文件夹", "");
                Debug.Log(_pat2);
                Debug.Log(_name);
                Debug.Log( AssetDatabase.RenameAsset(_pat2, _name));              
            }
        }
        Debug.Log("成功修改");
#endif

      

    }

调用方法:  SetFilesName2("目标文件夹", "目标字符");

3,修改文件夹下面所有文件夹及子节点的文件

 /// <summary>
 /// 修改所有
 /// </summary>
 /// <param name="folderPath">项目路径</param>
 /// <param name="_path2">目标父文件夹</param>
 /// <param name="_id">修改的后缀</param>
 /// <param name="_isFile">是否单个文件夹</param>
 private static void ListDirectory(string folderPath,string _path2,string _id,bool _isFile)
 {
     var _path11 = folderPath + @"\" + _path2;
     if (_isFile)
     {
         foreach (string directory in System.IO.Directory.GetDirectories(_path11, "*", SearchOption.AllDirectories))
         {
             Debug.LogError(directory);
             foreach (string file in System.IO.Directory.GetFiles(directory))
             {
                 FileInfo f = new FileInfo(file);
                 if (f.Extension != ".meta")
                 {
                     Debug.Log(f.Name);
                     var _name = f.Name.Replace(f.Extension, "") + _id;
                     var _pat2 = f.FullName.Replace(folderPath + @"\", "");
                     Debug.Log(AssetDatabase.RenameAsset(_pat2, _name));
                 }
                 
             }
         }
     }
     else
     {
         foreach (string file in System.IO.Directory.GetFiles(_path11))
         {
             FileInfo f = new FileInfo(file);
             if (f.Extension != ".meta")
             {
                 Debug.Log(f.Name);
                 var _name = f.Name.Replace(f.Extension, "") + _id;
                 var _pat2 = f.FullName.Replace(folderPath + @"\", "");
                 Debug.Log(_pat2);
                 Debug.Log(_name);
                 Debug.Log(AssetDatabase.RenameAsset(_pat2, _name));
             } 

           
         }
     }

   
 }

*注意

不同于C#,Unity刷新的方法最好用AssetDatabase.RenameAsset,不然会造成引用丢失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值