首先,我们写个编辑器下的调用方法
[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,不然会造成引用丢失。