window bat 批处理实例小结
2019-11-06 06:29:21
供稿:网友
::知识点小结::两个冒号::表示注释::学会使用帮助,任何命令 加 /?,列出帮助信息::@echo off取消回显::set赋值::%date%=如:2017/03/06 %time%=如:15:02:57.48::%date:~0,4%%date:~5,2%%date:~8,2%=得到时间,如20170306::cd /d 可以跨盘符切换目录::%cd%表示cd的当前路径::echo输出显示::rd /S /Q D:/temp,非空也删除文件夹::rd D:/temp,rd删除文件夹,如果文件夹为空,则删除,否则不删除::>>重定向(输出日志),2>>发生错误后重定向。如rd D:/temp 2>>D:/err.txt,如果删除D:/temp失败,则输出错误信息到D:/err.txt,注意,存放错误信息的文本路径最好写全。::goto命令,是跳转命令,goto year_flag执行到goto处,无条件跳转到:year_flag处,如果不存在year_flag报错::dir查看目录::for /f %%a in ('dir /b /ad /s 目录/^|sort /r') do (),循环目录下所有文件夹及子目录::for /d 遍历目录::for命令(for in do),变量用%%a表示,/f表示,读取in()里面的内容,此处必须用单引号引起来。::|管道符,将dir /b /ad /s 目录/^获取的内容赋值给sort /r倒序输出。::具体dir和for命令,请查询帮助::::@echo off::核心思想:1.先删除空的文件夹。2.进入最小的年文件夹,再进入最小的月文件夹,最后删除最小的日文件夹::声明,并设置年月日初值set year=2016set month=01set day=01set temp_file=D:/works/CTY/%date:~0,4%%date:~5,2%%date:~8,2%.txtset base_path=D:/works/CTY/cd /d %base_path%echo %date% %time% >>%temp_file%echo 遍历当前路径%cd%下所有的文件夹 >>%temp_file%for /f %%a in ('dir /b /ad /s %base_path%/^|sort /r') do ( echo 文件夹%%a >>%temp_file% rd "%%a" 2>>%temp_file%)echo 遍历结束,删除空文件夹>>%temp_file%::年文件夹跳转for /d %%s in (*) do (if exist %%s ( echo 文件夹%%s存在 >>%temp_file% set year=%%s goto year_flag) else ( echo %%s年文件夹不存在 >>%temp_file%)):year_flagecho 参数year=%year% >>%temp_file%cd %year% 2>>%temp_file%echo 跳转后的路径%cd% >>%temp_file%::月文件夹跳转for /d %%s in (*) do (if exist %%s ( echo 文件夹%%s存在 >>%temp_file% set month=%%s goto month_flag) else ( echo %%s月文件夹不存在 >>%temp_file%)):month_flagecho 参数month=%month% >>%temp_file%cd %month% 2>>%temp_file%echo 跳转后的路径%cd% >>%temp_file%::日文件夹跳转for /d %%s in (*) do (if exist %%s ( echo 文件夹%%s存在 >>%temp_file% set day=%%s goto day_flag) else ( echo %%s日文件夹不存在 >>%temp_file%)):day_flagecho 参数day=%day% >>%temp_file%echo 删除文件夹%cd%/%day% >>%temp_file%rd /S /Q %cd%/%day% 2>>%temp_file%echo 删除完毕!>>%temp_file%::暂停pause::删除命令rd /S /Q D:/works/CTY/2016/11/24