写了个清理系统垃圾的批处理,因而学了下For语句,记下感触和要点
来源:互联网 发布:英文字体设计软件 编辑:程序博客网 时间:2024/05/01 21:42
前段时间没事看360doc.com看到别人写了一个处理系统垃圾的批处理文件,觉得有点意思,Copy下来看看了下。后来没事时完美了一下加了点自己的东西,因此稍稍学了一下批处理的For语句。
我是个完美主义者,看到里面一堆的del /f /s /q C:/*.log之类的东西,C:/改成%systemdrive%,再想到有For语句,看了一下帮助,就写了一代替的:
for /r %systemdrive% %%1 in (*.tmp,*._mp,*.bak,*.log,*.chk,*.~*) do del /s /f /q %%1
这样简洁多了!(编译器会产生很多垃圾文件,加一条:改一下目录名和扩展名的匹配符就行了!)
之后又想到XP更新之后会产生大量的反安装目录,没必要保留,自己写一条:
for /d %%1 in (%windir%/$*$) do rd /q/s %%1
一试只能删除非隐藏目录,上网一问http://wenwen.soso.com/z/q245470208.htm,别人给出:
for /f %%i in ('dir /ad /b %windir%/$*$') do rd /s /q "%windir%/%%i"
行,能解决问题!但之后一想如果带空格的目录名还是处理不了!自己写了一句:
for /f "usebackq" %%i in (`dir /ad /b`) do rd /s/q '%%i'
试试不行,查资料:
无usebackq:字符串双引号;命令单引号
用usebackq:字符串单引号;命令反引号(`键盘1左边)
(一开始觉得难记住,想了下,与引号中的引号情况差不多,只是反引号特殊些,但For/?帮助中有这样的例子)
将rd /s/q 改成@echo测试一下,发现空格后面的字符被截取了usebackq没起作用,再仔细查查For/?帮助中的/f参数,加delims=表示没有分隔符:
for /f "usebackq delims=" %%i in (`dir /ad /b`) do rd /s/q "%%i"
试试,成了。动手时发现用了usebackq 并不影响do之后的语句,将'%%i'中单引号改回去"%%i"!
又觉得啰嗦,去掉usebackq,一试也行:
for /f "delims=" %%i in ('dir /ad /b %windir%/$*$') do rd /s/q "%%i"
对For语句有点兴趣,再看看For/?帮助,看到/r参数,再试试
for /r %windir% %%1 in ($*$) do rd /q /s "%%1"
KO!!最简洁了!!因此有了上面第一条清理匹配符指定的清理LJ语句。
这里,再来看看For的执行流程for /f "usebackq delims=" %%i in (`dir /ad /b`) do rd /s/q "%%i"
dir取得目录名(/b只取名字),并传给For分析(/f即用于解析用途),如果没指定分隔符即以空格默认代替,所以delims是必须的!!分析后传给%%i参数即是目录名,最后交由do之后的命令执行。如此循环!!"%%i"双引号的作用是告诉rd命令目录名可能有空格!!
贴上完整批处理:
@echo offrem echo 清空IE临时文件目录...del /f /s /q "%userprofile%\Local Settings\Temporary Internet Files\*.*"del /f /s /q "%userprofile%\Local Settings\Temp\*.*"rem echo 正在清除系统临时文件 *.tmp *._tmp *.log *.chk *.old ,请稍等...for /r %systemdrive% %%i in (*.tmp,*._mp,*.bak,*.chk,*.~*) do del /a-s /s /f /q "%%i"rem .log大部分有可能有用rem del /f /s /q %systemdrive%\*.logdel /f /s /q %windir%\installer\*.msidel /f /s /q %windir%\SoftwareDistribution\Download\*.*del /f /s /q "%systemdrive%\Program Files\WindowsUpdate\*.*"del /f /s /q "%systemdrive%\Program Files\InstallShield Installation Information\*.*"rem echo 清空垃圾箱,备份文件和预缓存脚本...del /f /s /q %systemdrive%\recycled\*.*rem del /f /s /q %windir%\*.bakdel /f /s /q %windir%\prefetch\*.*rd /s /q %windir%\temp & md %windir%\temprd /s /q %temp% & md %temp%rem cookies和最近历史还是保留吧...rem del /f /q %userprofile%\Cookies\*.*del /f /q %userprofile%\recent\*.*rem echo 清理系统盘无用文件...rem %windir%\system32\sfc.exe /purgecacherem echo 优化预读信息...rem %windir%\system32\defrag.exe %systemdrive% -brem for /r %windir% %%i in ($*$) do rd /q /s "%%i":: for /f "usebackq delims=" %%i in (`dir /ad /b %windir%\$*$`) do rd /s/q "%%i"for /f "delims=" %%i in ('dir /ad /b %windir%\$*$') do rd /s/q %windir%\"%%i"for /f "delims=" %%i in ('dir /ad /b C:\FOUND.???') do rd /s/q C:\"%%i"for /f "delims=" %%i in ('dir /ad /b D:\FOUND.???') do rd /s/q D:\"%%i"for /f "delims=" %%i in ('dir /ad /b E:\FOUND.???') do rd /s/q E:\"%%i"rem for /d 语句不能枚举隐藏属性的目录rem attrib /s /d -h -s %windir%\$*$rem for /d %%i in (%windir%\$*$) do rd /q /s "%%i"rem echo 清除系统完成!rem echo. & pause
将上面保存为批处理文件,加入到XP的关机脚本中,这样就不会占用启动时间!
实际使用中只有一个问题:某些程序安装或删除时会将启动/清理文件放在临时目录,造成不能安装或程序清理不干净的问题。只要暂时禁用该脚本就OK了!
最后说一下,在更复杂的场合下,个人感觉VBS脚本比Dos批处理好,用起来应该更方便点。我只是太久没用VB了,就没去弄了!!
- 写了个清理系统垃圾的批处理,因而学了下For语句,记下感触和要点
- 看了篇某博客之星写的有点感触,赞同观点记下,努力
- win清理垃圾批处理 有源码,比360好多了
- 写了个删除编译文件的批处理程序
- 对网上清理系统垃圾的批处理说两句
- linux下的系统垃圾清理
- 因而也就能和这个故事样流芳百世了
- Windows Vista系统垃圾清理批处理
- 超强版系统垃圾清理批处理
- 批处理帮你快速清理系统垃圾!
- linux系统空间满了的处理办法(如何清理空间垃圾)
- dos下 和 批处理中的 for 语句的基本用法
- dos下 和 批处理中的 for 语句的基本用法
- dos下 和 批处理中的 for 语句的基本用法
- dos下 和 批处理中的 for 语句的用法详解
- dos下和批处理中的for语句的基本用法
- 初学shell,为了练习sed,写了个简单的批量修改文件名的脚本,后来执行时发现系统竟然自带有一个rename命令,顺便也记下了
- 刚刚提取了金山毒霸的[垃圾清理] 和 [隐私清理], 分享方法,大家可以自己试一下
- javascript对url编码中escape,encodeURI,encodeURIComponent函数的用法区别
- website和web application哪个好
- SQL Server 自增字段归零等问题
- Java 2 垃圾收集机制,关于WeakReference等几种引用方式的阐述
- 数组与指针
- 写了个清理系统垃圾的批处理,因而学了下For语句,记下感触和要点
- 电脑定时开关机之二:DOS编程解决周末开机问题
- 把manifest藏起来
- ashx文件和aspx文件区别
- 树言树语:QQ微博开放平台滞后问题
- [转]geoserver与OpenLayers配置入门
- 解决Tomcat startup.bat启动失败的问题
- javascript小技巧(非常全)
- ashx是什么文件,如何创建