因为每天需要大量处理文件,导致我的桌面长时间混乱不堪。甚至会因为手动整理桌面文件误删有用的文件。于是为了解决这个痛点,我尝试用python3,AHK等写桌面整理脚本自用,再一次又一次的尝试下,还是决定采用不用换电脑重装系统就要重装一次依赖环境的bat语言脚本开发。
废话结束放上代码和截图,喜欢的朋友可以关注一下。

大神桌面整理界面

大神桌面整理效果
代码如下(新建文本文档,输入以下内容,最后修改文件后缀名为*.bat即可使用)
@echo off set title_T=桌面便捷整理工具 --By:dashen.wang 文件修改时间:%~t0 title %title_T% rem 格式化时间 for /f "tokens=2 delims==" %%a in ('wmic path win32_operatingsystem get LocalDateTime /value') do ( set tt=%%a ) set Today=%tt:~0,4%-%tt:~4,2%-%tt:~6,2% set Time_T=%tt:~8,2%:%tt:~10,2%:%tt:~12,2% set y=%Today:~0,4% set m=%Today:~5,2% set d=%Today:~8,2% set t=%Time_T:~0,8% set t=%t::=.% set config_sort_dir=%AllUsersProfile%\Auto_Sort_Desktop_files\ set config_sort_log=%AllUsersProfile%\Auto_Sort_Desktop_files\log set config_sort_file=%AllUsersProfile%\Auto_Sort_Desktop_files\config.ini rem 获取下桌面路径 for /f "tokens=2,*" %%i in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Desktop"') do ( set desktop_dir=%%j ) rem 判断配置文件夹以及配置文件是否存在,不存在创建 if not exist "%config_sort_dir%" mkdir "%config_sort_dir%" if not exist "%config_sort_log%" mkdir "%config_sort_log% if not exist "%config_sort_log%\delete" mkdir "%config_sort_log%\delete" if not exist "%config_sort_file%" (goto first_Use) else (goto choice_config) :choice_config set ERRORLEVEL= choice /C YN /M "要重新配置请在5s内输入Y" /T 5 /D N if "%ERRORLEVEL%"=="1" goto re_config goto start_main :first_Use cls echo. echo =====================欢迎试用桌面自动整理工具========================= echo 1.检测到配置文件不存在,请对本工具进行一个简单的配置 echo 2.可以直接拖放文件夹到本窗口,CMD会自动获取文件夹路径 echo 3.只要选定一个文件夹,每次打开工具,工具会将桌面文件移动到 echo 设定的文件夹下面,按照 选定文件夹\年\年-月-日\具体文件 echo 这种形式文件夹下面. echo 4.配置文件在%config_sort_dir%目录底下,日志也在此目录 echo 5.关于日志,最多保存最近30天的文件,超过30天的,会移动到 echo 配置文件夹log\delete目录下面,下次运行本工具的时候会 echo 删除里面的所有文件,so不要放东西进去奥... echo 欢迎试用. echo ====================================================================== echo. echo ==========================配置模式选择================================ echo 1.使用默认配置,自动归档桌面文件和文件夹到D:\原桌面 echo 2.手工设定归档文件架 echo ====================================================================== echo. set /p config_style=请输入要使用的配置模式前面的数字,回车确认: set config_style=%config_style: =% if "%config_style%"=="1" goto default_config if "%config_style%"=="2" goto hands_config goto config_error :default_config echo auto_sort_dir=d:\原桌面 >>%config_sort_file% goto start_main :hands_config echo . echo 小提示:直接拖放文件夹到本窗口可以直接获取文件夹路径 set /p hands_config_dir=请输入归档文件夹: rem 判断先是不是在系统盘,如果是,那就提示,这里就不判断是不是在桌面了,不好处理...关键字不能用,取前xx位判断貌似不太准,鬼知道用户的用户名多长...... set input_disk=%hands_config_dir: =% set input_disk=%input_disk:~0,1% set system_disk=%systemroot:~0,1% rem 悲剧啊,找了别人写的转换大小写的批处理,活活看不懂T_T....用笨方法吧... set "code=aA bB cC dD eE fF gG hH iI jJ kK lL mM nN oO pP qQ rR sS tT uU vV wW xX yY zZ" setlocal EnableDelayedExpansion for %%i in (%code%) do ( set code_T=%%i if "!input_disk!"=="!code_T:~0,1!" set input_disk=!code_T:~1,1! ) for %%i in (%code%) do ( set code_T=%%i if "!system_disk!"=="!code_T:~0,1!" set system_disk=!code_T:~1,1! ) setlocal DisableDelayedExpansion if "%input_disk%"=="%system_disk%" goto dir_error echo auto_sort_dir=%hands_config_dir% >>%config_sort_file% goto start_main :start_main goto read_config :start_move_file if not exist "%auto_sort_dir%" mkdir "%auto_sort_dir%" if not exist "%auto_sort_dir%\%y%\" mkdir "%auto_sort_dir%\%y%\" if not exist "%auto_sort_dir%\%y%\%y%-%m%-%d%\" mkdir "%auto_sort_dir%\%y%\%y%-%m%-%d%\" echo robocopy %desktop_dir%\ %auto_sort_dir%\%y%\%y%-%m%-%d%\ /E /MOVE /XF *.lnk robocopy %desktop_dir%\ %auto_sort_dir%\%y%\%y%-%m%-%d%\ /V /LOG+:%config_sort_log%\%y%-%m%-%d%.log /E /MOVE /XF *.lnk if exist "%desktop_dir%\归档文件夹.lnk" del /q /f "%desktop_dir%\归档文件夹.lnk" if exist "%desktop_dir%\开始归档桌面文件.lnk" del /q /f "%desktop_dir%\开始归档桌面文件.lnk" set SrcFile=%auto_sort_dir%\%y%\ set Icon=%systemroot%\System32\shell32.dll,301 set LnkFile=%desktop_dir%\归档文件夹 call :CreateShort "%SrcFile%" "%LnkFile%" "%Icon%" set SrcFile=%~dpnx0 set Icon=%systemroot%\system32\shell32.dll,80 set LnkFile=%desktop_dir%\开始归档桌面文件 call :CreateShort "%SrcFile%" "%LnkFile%" "%Icon%" goto handle_logfile :handle_logfile rem 啥?这不是只删除.log文件啊,上面你说删除所有的啊......呵呵哒,吓唬你不行啊 del /s /q /f %config_sort_log%\delete\*.log >>%config_sort_log%\%y%-%m%-%d%.log rem 将30天前的文件移动到delete文件夹 robocopy %config_sort_log% %config_sort_log%\delete /E /MOVE /MINAGE:30 /LEV:1 goto good_job :config_error cls echo . echo ========================配置模式选择错误============================== echo 很抱歉,配置模式选择错误,请重新输入 echo 你的输入为: %config_style% echo ====================================================================== ping 127.0.0.1 -n 3 >nul goto first_Use :dir_error cls echo . echo ========================归档路径配置错误============================== echo 很抱歉,归档路径选择错误,不允许使用系统盘,请重新配置 echo 你的配置的文件夹为: %hands_config_dir% echo ====================================================================== ping 127.0.0.1 -n 3 >nul goto first_Use :read_config setlocal EnableDelayedExpansion for /f "tokens=2 delims==" %%a in ('find "auto_sort_dir" "%config_sort_file%"') do ( set auto_sort_dir=%%a ) setlocal DisableDelayedExpansion goto del_space :del_space set space=%auto_sort_dir:~-1% if "%space%" NEQ " " (goto start_move_file) else ( set auto_sort_dir=%auto_sort_dir:~0,-1% goto del_space ) :CreateShort mshta VBScript:Execute("Set a=CreateObject(""WScript.Shell""):Set b=a.CreateShortcut(""%~2.lnk""):b.TargetPath=""%~1"":b.IconLocation=""%~3"":b.WorkingDirectory=""%~dp1"":b.Save:close") goto :eof :re_config cls setlocal EnableDelayedExpansion for /f "tokens=2 delims==" %%a in ('find "auto_sort_dir" "%config_sort_file%"') do ( set auto_sort_dir=%%a ) setlocal DisableDelayedExpansion echo . echo ========================当前配置============================== echo 当前配置目录:%auto_sort_dir% echo 1.重新配置 echo 2.呃呃呃,按错了,放我回去 echo ============================================================== echo . echo. set /p re_config_num=请输入要使用的配置模式前面的数字,回车确认: set re_config_num=%re_config_num: =% if "%re_config_num%"=="1" goto first_Use if "%re_config_num%"=="2" goto start_main :good_job cls echo . echo ========================归档完毕============================== echo 已归档完毕 echo 程序将在10s后退出,欢迎再次使用 echo ============================================================== echo . ping 127.0.0.1 -n 10 >nul goto exit_me :exit_me exit