精华内容
下载资源
问答
  • Unity 自动清理空文件夹 因为项目管控用的是Git,没法上传空文件夹。但是Unity又会对空文件夹生成相应的meta文件。导致Git提交的时候会提交这些meta文件。当项目中其他人拉下来的时候Unity又会将这些meta文件进行...

    Unity 自动清理空文件夹

    因为项目管控用的是Git,没法上传空文件夹。但是Unity又会对空文件夹生成相应的meta文件。导致Git提交的时候会提交这些meta文件。当项目中其他人拉下来的时候Unity又会将这些meta文件进行删除。一来二去冲突就来了。

    使用CleanEmptyDir插件

    插件挺好用的,就是美术还是不会去点进去自己清理一遍。所以,决定自己把它改成纯自动的。

    代码实现

    清理的核心代码还是用的插件的,然后把搜索部分开了个线程来跑。然后加了个自动清理的功能。

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Threading;
    using UniRx;
    using UnityEditor;
    using UnityEngine;
    
    namespace AltProg.CleanEmptyDir
    {
        [InitializeOnLoad]
        public class AutoCleanEmptyDir
        {
            /// <summary>
            ///     资源地址
            /// </summary>
            private static readonly string dataPath;
    
            /// <summary>
            ///     是否正在清理
            /// </summary>
            private static bool cleaning;
    
            /// <summary>
            ///     自动清理触发事件
            /// </summary>
            private static readonly BoolReactiveProperty autoCleanDir = new BoolReactiveProperty();
    
            /// <summary>
            ///     定时清理事件
            /// </summary>
            private static IDisposable timerClean;
    
            static AutoCleanEmptyDir()
            {
                dataPath = Application.dataPath;
                CheckAutoCleanDir();
                autoCleanDir.Subscribe(OnAutoClean);
            }
    
            /// <summary>
            ///     自动清理启动函数
            /// </summary>
            private static void AutoClean()
            {
                if (cleaning) return;
                Debug.Log("检测到工程资源变动,开始检查是否有空文件夹。");
                Observable.Start(FindEmptyDir).ObserveOnMainThread().Where(_ =>
                {
                    Debug.Log(_.Count > 0 ? $"检测到空文件夹{string.Join("\n", _)}" : "未检测到空文件夹。");
                    return _.Count > 0;
                }).Subscribe(DeleteEmptyDir);
            }
    
            /// <summary>
            ///     自动清理菜单函数
            /// </summary>
            [MenuItem("Assets/自动清理空文件夹")]
            public static void CheckAutoCleanDir()
            {
                autoCleanDir.Value = !autoCleanDir.Value;
            }
    
            /// <summary>
            ///     当自动清理选项bool状态转换时
            /// </summary>
            private static void OnAutoClean(bool state)
            {
                timerClean?.Dispose();
                timerClean = null;
                if (state)
                {
                    EditorApplication.projectChanged += AutoClean;
                    Debug.Log("已启动自动清理空文件夹,将在工程资产变动时进行清理。");
                }
                else
                {
                    EditorApplication.projectChanged -= AutoClean;
                    timerClean = Observable.Timer(TimeSpan.FromHours(1)).Subscribe(_ => autoCleanDir.Value = true);
                    Debug.Log("已关闭自动清理空文件夹,将在1小时后自动开启。");
                }
    
                Menu.SetChecked("Assets/自动清理空文件夹", state);
            }
    
            /// <summary>
            ///     寻找空文件夹
            /// </summary>
            /// <returns>空文件夹列表</returns>
            private static List<DirectoryInfo> FindEmptyDir()
            {
                var newEmptyDirs = new List<DirectoryInfo>();
                WalkDirectoryTree(dataPath, (dirInfo, areSubDirsEmpty) =>
                {
                    var isDirEmpty = areSubDirsEmpty && DirHasNoFile(dirInfo);
                    if (isDirEmpty)
                        newEmptyDirs.Add(dirInfo);
                    return isDirEmpty;
                });
                return newEmptyDirs;
            }
    
            /// <summary>
            ///     删除空文件夹
            /// </summary>
            /// <param name="infos">空文件夹列表</param>
            private static void DeleteEmptyDir(List<DirectoryInfo> infos)
            {
                cleaning = true;
                foreach (var dirInfo in infos) AssetDatabase.MoveAssetToTrash(GetRelativePathFromCd(dirInfo.FullName));
                cleaning = false;
            }
    
            /// <summary>
            ///     判断是否为空文件夹
            /// </summary>
            /// <param name="dirInfo">文件夹信息</param>
            /// <param name="areSubDirsEmpty">是否为空文件夹</param>
            private delegate bool IsEmptyDirectory(DirectoryInfo dirInfo, bool areSubDirsEmpty);
    
            /// <summary>
            ///     遍历文件夹树
            /// </summary>
            /// <param name="rootPath">根文件路径</param>
            /// <param name="pred">判空方法</param>
            /// <returns></returns>
            private static bool WalkDirectoryTree(string rootPath, IsEmptyDirectory pred)
            {
                var root = new DirectoryInfo(rootPath);
                //获取当前目录下的文件夹
                var subDirs = root.GetDirectories();
    
                //这个子文件是否为空
                var areSubDirsEmpty = true;
                //遍历子文件夹
                foreach (var dirInfo in subDirs)
                    if (false == WalkDirectoryTree(dirInfo.FullName, pred))
                        areSubDirsEmpty = false;
    
                var isRootEmpty = pred(root, areSubDirsEmpty);
                return isRootEmpty;
            }
    
            /// <summary>
            ///     判断文件夹是否不存在文件
            /// </summary>
            /// <param name="dirInfo"></param>
            /// <returns></returns>
            private static bool DirHasNoFile(DirectoryInfo dirInfo)
            {
                FileInfo[] files = null;
    
                try
                {
                    files = dirInfo.GetFiles("*.*");
                    files = files.Where(x => !IsMetaFile(x.Name)).ToArray();
                }
                catch (ThreadAbortException)
                {
                }
                catch (Exception e)
                {
                    Debug.LogError(e.Message);
                }
    
                return files == null || files.Length == 0;
            }
    
            /// <summary>
            ///     判断是否是Meta文件
            /// </summary>
            /// <param name="path"></param>
            /// <returns></returns>
            private static bool IsMetaFile(string path)
            {
                return path.EndsWith(".meta");
            }
    
            private static string GetRelativePathFromCd(string filespec)
            {
                return GetRelativePath(filespec, Directory.GetCurrentDirectory());
            }
    
            private static string GetRelativePath(string filespec, string folder)
            {
                var pathUri = new Uri(filespec);
                // Folders must end in a slash
                if (!folder.EndsWith(Path.DirectorySeparatorChar.ToString())) folder += Path.DirectorySeparatorChar;
                var folderUri = new Uri(folder);
                return Uri.UnescapeDataString(folderUri.MakeRelativeUri(pathUri).ToString()
                    .Replace('/', Path.DirectorySeparatorChar));
            }
        }
    }
    

    注意事项

    1. 默认情况下当工程资源改动时就会触发清理。但是当美术烘焙场景生成光照贴图的时候会把原本的光照贴图删了,再生成。这中间有时候会先被当成空文件夹给清理掉。所以烘焙场景的时候最好先取消自动清理空文件夹的功能。
    2. 代码引用了UniRx库,不需要的可以自行修改。
    3. 有个弊端就是没法在Project窗口里直接新建文件夹了,要不就先暂时把功能关了,要不就直接去Windows文件管理窗口新建,然后把东西放进去。
    4. 关闭功能后,1小时后会自动勾选,具体的时间可以去代码里面进行调节。
    展开全文
  • 空白文件夹清理.bat

    2020-12-21 10:24:21
    一个简易的空白文件夹清理工具,将文件复制到要清理的文件夹下,右击,管理员模式运行,就能自动清理文件夹下的空白文件夹
  • 空文件夹清理工具是一款便捷使用的删除电脑上空白文件夹的小工具,此款软件小巧实用,能够一键扫描、删除电脑上的空白文件夹。 空文件夹清理工具使用方法 直接打开即可自动运行并删除空白文件夹 软件会自动删除各...
  • 原文:删除指定目录下的文件及空文件夹echo offecho 正在执行数据库备份清理及转储,执行完毕自动退出,请勿强制关机!!!rem 删除I:\BatTest\test目录下的文件及空文件夹set a=I:\BatTest\test forfiles /s /p %a% /m...
    原文:删除指定目录下的文件及空文件夹

    echo off
    echo 正在执行数据库备份清理及转储,执行完毕自动退出,请勿强制关机!!!
    rem 删除I:\BatTest\test目录下的文件及空文件夹
    set a=I:\BatTest\test


    forfiles /s /p %a% /m *.* /d -90 /c "cmd /c  echo @file | del @file"

    echo %a%

    for /f "tokens=*" %%a in ('dir /b /ad /s %a% ^|sort /r') do rd "%%a" 2>nul

    pause

    rem 本次操作完毕,请验证所有执行结果!

     

    删除本地所有空文件夹的bat代码  

     

     @echo off
    for /f "tokens=*" %%a in ('dir /b /ad /s "目标路径"^|sort /r') do rd "%%a" 2>nul
    pause
    goto :eof
    @echo off
    for /f "delims=" %%i in ('dir /ad /b /s') do call :rd_dir_empty "%%i"
    goto :eof

    rem ======= 删除空目录 =========
    :rd_dir_empty
    rd %1 2>nul||goto :eof
    set dir_route=%1
    for /f "delims=" %%i in (%dir_route%) do (
        set dir_route="%%~dpi"
        for /f "delims=" %%j in ('dir /ad /b "%%~dpi"')do rd "%%~dpi%%j" 2>nul||goto :eof
    )
    :: 把路径最后的\去掉,以便set route_deepest="%%~dpi"能取到上一层路径
    if "%dir_route:~-2,1%"=="\" set dir_route="%dir_route:~1,-2%"
    if /i not "%cd%"==%dir_route% call :rd_dir_empty %dir_route%
    goto :eof
     
    posted on 2014-11-14 19:59 NET未来之路 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/lonelyxmas/p/4098067.html

    展开全文
  • 导致Gen文件夹下为。 网上的资料大多数都是要清理项目等等。 另外就是原本有Gen文件夹下的内容的源码,通过导入Android Project from Existing Code。清理代码之后就会出现同样的问题。 今天小...

    通常这个问题的表现为Eclipse报错:R cannot be resolved to a variable

    原因是因为Eclipse没有帮我们自动生成固定资源的索引。导致Gen文件夹下为空。

    网上的资料大多数都是要清理项目等等。

    另外就是原本有Gen文件夹下的内容的源码,通过导入Android Project from Existing Code。清理代码之后就会出现同样的问题。

    今天小猪找到了问题的根源:即Android ADK的问题

    引用:
    Hope you know Android studio has gradle building tool. Same as in eclipse they have given new component in the Tools folder called Android SDK Build-tools that needs to be installed. Open the Android SDK Manager, select the newly added build tools, install it, restart the SDK Manager after the update.

    f21LZ

    选择安装好adk后重启eclipse后再看看呢?

    转载于:https://www.cnblogs.com/smallerpig/p/3668518.html

    展开全文
  • 清理_desktop.ini全过程.

    2008-01-27 15:45:00
    做个自解压包吧,能解压到各个游戏文件夹内这个东西一重启会自动在系统盘生成几个exe文件,然后启动,你可以根据创建或修改时间去把它找出来,然后自己建几个跟它一样文件名的exe,加属性 +attrib +r +h +s +a,做个自解...

    清理_desktop.ini全过程.
    2006-09-27 18:48
    先把不还原盘没有中毒的exe全部提取出来,做个自解压包吧,能解压到各个游戏文件夹内

    这个东西一重启会自动在系统盘生成几个exe文件,然后启动,你可以根据创建或修改时间去把它找出来,然后自己建几个跟它一样文件名的空exe,加属性 +attrib +r +h +s +a,做个自解压包放在启动项,比它先建到系统盘,它就没办法了,哈哈

    再用批处理

    @echo off
    echo 正在清除^^文件,请稍等......
    del c:/_desktop.ini /f/s/q/a
    del d:/_desktop.ini /f/s/q/a
    del e:/_desktop.ini /f/s/q/a
    del f:/_desktop.ini /f/s/q/a
    echo 清除完毕!
    exit

    要多运行这个批处理几次,因为你删除了,它自动会生成,直到找不到这个文件为止

    谁把这个批处理搞成循环吧,循环几次的停止的那种

    然后再把正常的exe文件解压包运行一次,重启就OK了

    最好把server停了吧,懒人,像我这种人,懒得去还保护再去禁server

    可以用这个批处理,放在启动项里,停止

    @echo off
    net stop Server
    exit

    放上我的那个预防病毒运行的自解压,可能你的会不同,自己修改一下 

    展开全文
  • 备份计划不执行

    2008-08-02 16:12:56
    设置了备份计划,备份路径也是磁盘根目录的英文文件夹,触发时间为4小时,备份开始时间也是开机时间,但是数据备份不成功,备份文件夹下有20080606,20080607这样的空文件夹,但是所有账套下的文件夹都是空的.SQL的AGENT也...
  • 空文件夹查找器:在您的Windows发现并删除空文件夹 文件分割合并:将大文件分割成几个更小的文件,然后重新整合他们。 系统工具 进程管理:监视当前运行的程序,并可以区分在您的电脑间谍软件和木马。 浏览器扩展...
  • 空文件夹查找器:在您的Windows发现并删除空文件夹 文件分割合并:将大文件分割成几个更小的文件,然后重新整合他们。 系统工具 进程管理:监视当前运行的程序,并可以区分在您的电脑间谍软件和木马。 浏览器...
  • os、文件操作

    2019-03-30 20:56:57
    主要用于工具篇——使用ABOBOO学美剧(强推)python脚本的优化和扩展 ...自动清理文件夹 下面是我写程序时遇到的问题 如何判断一个变量是否是字符? #encoding=utf-8 str="\n\t" if str.strip()=="": ...
  • 5)自定义LJ分析,可以分析某个磁盘或者文件夹下的文件分布,自动分拣出大小为0的文件,空文件夹,LJ文件,超大文件,供用户手动清理和删除。 6)文件反删除,支持NTFS下删除文件的再恢复,按照图片,文档,多媒体,...
  • 清空无效清理已安装应用程序中的空文件夹/无效快捷方式。内置自启动管理器可以管理随windows自动运行的程序。磁盘清理可以扫描清理磁盘中的垃圾文件。隐私擦除器可以擦除软件的使用记录及上网记录,文件粉碎器可以...
  • B787next-源码

    2021-02-14 12:37:50
    要安装,请将B787next文件夹复制到您的社区软件包文件夹中。 变更记录 FMC: 固定的颜色/ FMC显示屏的对齐方式(洋红色选择器现在也已对齐) 将时间/日期添加到FMC顶部并实时更新 已更新“腿”页面以在飞行过程中...
  •  磁盘清理管理(G) 组策略(Z) 增加/删除程序(U)设备管理器 控制面板 系统自动登录管理XP右键扩展设置软件使用说明:注意:1.自定义右键名称请不要留 2.新右键名称在浏览文件夹确认后才生效3.如需取消右键,只...
  • 无忧代课破解

    2018-09-29 22:03:18
    备份文件缺省文件夹为 程序目录的 月表备份 文件夹,此功能可在每月末手工进行一次,同时会询问是否清理本月代课记录,以便下月重新统计; 7 代课单管理功能: 删除,导入,导出(文件存放位为 代课单备份 文件夹)...
  • 后来发展成一个可以自动清理U盘中Auto病毒的工具。2009年用Visual Basic做了一个外壳程序,同时增加了一些功能。2009年毕业后,用VB和VB script改写了绝大多数的批处理代码。后又经过几次改版具有了U盘杀毒精灵的...
  • 删除当前目录下及其子文件夹中所有的空文件夹.cmd 删除所有以数字命名的文件夹.cmd 删除指定文件夹之外的其他文件夹和文件.cmd 删除指定路径下指定文件及文件夹外的所有文件及文件夹2.bat 删除某些文件夹之外的目录....
  • 易语言 茶凉专用模块

    2010-05-04 12:26:36
    参数 图标文件, 文本型, 可, 图标文件的路径 可:为时用目标的第一个图标 .参数 运行方式, 整数型, 可, 1,常规方式,3,最大化,7,最小化 .参数 备注, 文本型, 可, 快方式的备注信息 .参数 快捷键, 文本型, ...
  • 今天在调试一个网上的小例子的时候,遇到的...可以生成的,为什么现在不能用了,发现项目中gen目录下那些自动生成的文件R.java等不见了,文件夹也为,于是通过重新清理项目,重新构建等也没能让它产生。最终还是通...
  • 删除当前目录下及其子文件夹中所有的空文件夹.cmd 删除所有以数字命名的文件夹.cmd 删除所有分区的默认共享.bat 删除指定文件夹之外的其他文件夹和文件.cmd 删除某些文件夹之外的目录.cmd 删除重复行.cmd 删除...
  • 删除当前目录下及其子文件夹中所有的空文件夹.cmd 删除所有以数字命名的文件夹.cmd 删除指定文件夹之外的其他文件夹和文件.cmd 删除某些文件夹之外的目录.cmd 判断是文件还是文件夹.cmd 在所有文件夹下建立随机文件....
  • 2.在主界面和拓展界面的自动加载文件或者文件夹功能中,新增备用加载方式; 3.在音视频媒体批量裁剪转换功能模块中,新增媒体文件系列分割功能; 4.修正文件夹批量更名功能中,仅添加功能卡中的更名文件夹名生效,...
  • 15、精简程序为4个文件,解压后系统大小约200KB,所有调用修改及网站标题等修改均在AsaiFun.asp文件中,方便大家设置; 16、设置入库贴,放置会员或管理员不当操作删除掉,有效保护好帖、精华帖,提供类似信息...
  • ASD:Microsoft Word的自动保存文件;Microsoft高级流媒体格式(microsoft advanced streaming format,ASF)的描述文件;可用NSREX打开 Velvet Studio例子文件 ASF:Microsoft高级流媒体格式文件 ASM:汇编语言...
  • 4:进入后台 右上角清理缓存 5:升级完成 PHP云人才招聘系统 v4.6Beta-20180920 - 更新日志 新增:套餐可强制金额消费(目的是让站长在设定积分或其他消费模式的情况下不影响主体营收) 优化:手机(WAP)端...
  • 15、精简程序为4个文件,解压后系统大小约200KB,所有调用修改及网站标题等修改均在AsaiFun.asp文件中,方便大家设置; 16、设置入库贴,放置会员或管理员不当操作删除掉,有效保护好帖、精华帖,提供类似信息...
  • xheditor-1.1.14

    2012-08-07 09:25:30
    如果您希望样式表存储在系统自带的模板目录ui.css中,请将插件对象的样式名留,则会自动按照插件名来调用相应的样式,例如:xhEdtBtnCut、xhEdtBtnCopy,其中的Cut和Copy是插件名 具体调用方法请参考演示文件夹中...

空空如也

空空如也

1 2 3
收藏数 53
精华内容 21
关键字:

自动清理空文件夹