[3]让你的Ghost XP更加自动化---dllcache的重建
@echo off
关闭回显
dir %systemroot%\system32\dllcache /a /b >files.txt
先把dllcache内的文件列表存在files.txt
sfc /purgecache
清除dllcache
echo @echo on >fdir.cmd
把@echo on这句存入fdir.cmd
执行fdir.cmd时首先将会开启回显
for /f %%I in (files.txt) do echo dir c:\%%I /a /b /s ^>^>%systemroot%\fdir.txt >>fdir.cmd
for /f %%I in (files.txt) 意思是 把files.txt每一行的文件名读入变量i,一次读入一行。
dir c:\%%I /a /b /s 意思 是在整个C:上查找变量i所存的文件名
^>^> 意思是 执行时把"^>^>"当作普通字符">>"来处理
实际整句执行时,这一句会把files.txt里每一行转化成,dir c:\每行内容 /a /b /s>>fdir.txt,并存在fdir.cmd(这一步由于不能用echo off
模式,所以执行速度很低)
例如files.txt第一行为abc.dll,第二行为cde.dll
那么将转化为
dir c:\abc.dll /a /b /s>>fdir.txt
dir c:\cde.dll /a /b /s>>fdir.txt
这句的意思是在整个C:上用dir查找cde.dll
然后把找到的文件完整路径写入fdir.txt(这步将花掉很多时间,毕竟是在成千上万个文件中查找一个文件)
call fdir.cmd
调用fdir.cmd
del fdir.cmd
del files.txt
删除临时文件
set fdir=%systemroot%\fdir.txt
设置变量fdir为%systemroot%\fdir.txt
for /f "usebackq" %%J in (%fdir%) do copy %%J %systemroot%\system32\dllcache\ >nul
读取fdir.txt中每一行(上面的命令所得到的文件完整路径),执行复制命令
del %fdir%
删除%systemroot%\fdir.txt
-------------------------------------------------------------------------------------
以上所有命令的详细帮助就在2000的帮助和支持中心。
想知道所有命令的详细使用方法,在帮助和支持中心中以"命令行参考"为关键字查找,即可找到"命令行参考 A-Z"
-------------------------------------------------------------------------------------
可惜的是,这个方法对dllcache的文件改名复制机制仍然无效。
撇开执行效率低不谈,如果出现C:中其他不相关文件夹里有一个文件,本不该和dllcache内的文件重名,却重名了,当这个文件被最后复制时
,将被错误的复制到dllcache里,替代正确的文件。
这是一种欠缺深思熟虑的做法,很抱歉,这种做法我无法认同。