标题: [系统相关] 【已解决】批处理能调用Shell32.dll来清空回收站吗? [打印本页]
作者: hkmhd 时间: 2009-3-10 20:05 标题: 【已解决】批处理能调用Shell32.dll来清空回收站吗?
此前发过一个帖子寻找清空回收站的办法,不过得到的回复同样是使用RD命令,使用RD命令不够便利,也不想借助第三方程序来清空
不知道有没有法子能够调用到Shell32.dll来清空回收站呢?
http://bbs.bathome.net/thread-3404-1-1.html
[ 本帖最后由 hkmhd 于 2009-3-23 16:15 编辑 ]
作者: zqz0012005 时间: 2009-3-10 21:21
不能。编程才能实现。
Rundll32只能调用极为有限的一部分API函数。
作者: Batcher 时间: 2009-3-10 21:43
使用RD命令不够便利,具体体现在什么地方呢?
作者: tireless 时间: 2009-3-10 22:22
保存为批处理:- Windows Registry Editor Version 5.00
- ;@cls®edit /s "%~f0"&start cleanmgr /sagerun:&exit
- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Active Setup Temp Folders]
- "StateFlags0000"=dword:00000000
- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Compress old files]
- "StateFlags0000"=dword:00000000
- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Downloaded Program Files]
- "StateFlags0000"=dword:00000000
- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Internet Cache Files]
- "StateFlags0000"=dword:00000000
- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Memory Dump Files]
- "StateFlags0000"=dword:00000000
- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Microsoft_Event_Reporting_2.0_Temp_Files]
- "StateFlags0000"=dword:00000000
- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Offline Pages Files]
- @="{8E6E6079-0CB7-11d2-8F10-0000F87ABD16}"
- "StateFlags0000"=dword:00000000
- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Old ChkDsk Files]
- "StateFlags0000"=dword:00000000
- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Recycle Bin]
- @="{5ef4af3a-f726-11d0-b8a2-00c04fc309a4}"
- "StateFlags0000"=dword:00000002
- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Remote Desktop Cache Files]
- "StateFlags0000"=dword:00000000
- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Setup Log Files]
- "StateFlags0000"=dword:00000000
- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Temporary Files]
- "StateFlags0000"=dword:00000000
- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\WebClient and WebPublisher Cache]
- "StateFlags0000"=dword:00000000
复制代码
作者: hkmhd 时间: 2009-3-11 12:08
楼上的比RD还夸张- -
其实也不是说RD不便利,只是想远程对所有机器执行清空回收站,感觉会挺影响效率,想尽量减少代码量
作者: Batcher 时间: 2009-3-11 12:18 标题: 回复 5楼 的帖子
感觉会挺影响效率?依据就只是感觉吗?有没有真实的测试数据拿出来给大家分享一下?
另,代码量和执行效率没有必然的联系。如果你用了不好的算法,可能你的1行代码还不如别人的100行代码效率高:)
作者: pusofalse 时间: 2009-3-11 13:56
用vbs可以,但要注册dynwrap.dll,比着葫芦画瓢,来个vbs版的:- Dim hWndOwner, Drive, Flags, iResult
- Dim Sherb_noSound, Sherb_noProgressUi, Sherb_noConfirmation, error_success
-
- Sherb_noSound = 4 ' 无删除声音
- Sherb_noProgressUi = 2 ' 无删除界面
- Sherb_noConfirmation = 1 ' 无确认
- error_success = 0
-
- ' API 参数
- hWndOwner = 0 ' 对话框父窗口句柄
- Drive = NUL ' 盘符,NUL 为所有盘符,or "c:\", "d:\program files\"
- Flags = Sherb_noSound Or Sherb_noProgressUi Or Sherb_noConfirmation ' 标志
-
- Set Wrap = CreateObject("DynamicWrapper")
- Wrap.Register "Shell32.dll", "SHEmptyRecycleBin", "i=hsu", "R=l"
- iResult = Wrap.SHEmptyRecycleBin(hWndOwner, Drive, Flags)
- ' msgbox(iResult)
复制代码
dynwrap.dll 下载地址 http://bbs.bathome.net/thread-2882-1-1.html
返回值为error_success则调用成功。
[ 本帖最后由 pusofalse 于 2009-3-11 14:19 编辑 ]
作者: zqz0012005 时间: 2009-3-11 21:24
dynwrap.dll还是第三方工具。
不过其体积较小,可以用any2vbs将包含在脚本中。而且注册这个工具后,可以调用更多的API函数,还算比较值得。
作者: tireless 时间: 2009-3-11 23:09
本帖最后由 pcl_test 于 2017-6-6 18:58 编辑
http://www.bathome.net/redirect. ... 9759&ptid=33489
作者: everest79 时间: 2009-3-12 02:50
- Sub ClrRecycleBin() '清空回收站
- On Error Resume Next
- Dim oShell, oSHFolder, objFSO, oSHFItem, FilePath
-
- Set oShell = CreateObject("Shell.Application")
- Set oSHFolder = oShell.Namespace(&Ha&)
- Set objFSO = CreateObject("Scripting.FileSystemobject")
-
- FOR each oSHFItem IN oSHFolder.Items
- IF (oSHFItem.type = "File Folder") THEN '删除文件夹
- FilePath = oSHFItem.Path
- objFSO.DeleteFolder FilePath,True
- ELSE '删除文件
- FilePath = oSHFItem.Path
- objFSO.DeleteFile FilePath,True
- End IF
- NEXT
-
- Set objFSO = Nothing
- Set oshell = Nothing
- Set oSHFolder = Nothing
- END Sub
复制代码
作者: hkmhd 时间: 2009-3-23 16:15
来来去去还是这些办法,还是用第三方命令好了……谢谢楼上帮忙解决的人
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |