找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28525|回复: 10

[系统相关] 【已解决】批处理能调用Shell32.dll来清空回收站吗?

[复制链接]
发表于 2009-3-10 20:05:36 | 显示全部楼层 |阅读模式
此前发过一个帖子寻找清空回收站的办法,不过得到的回复同样是使用RD命令,使用RD命令不够便利,也不想借助第三方程序来清空
不知道有没有法子能够调用到Shell32.dll来清空回收站呢?
http://bbs.bathome.net/thread-3404-1-1.html

[ 本帖最后由 hkmhd 于 2009-3-23 16:15 编辑 ]

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢主动给标题标注[已解决]字样

查看全部评分

发表于 2009-3-10 21:21:05 | 显示全部楼层
不能。编程才能实现。
Rundll32只能调用极为有限的一部分API函数。
发表于 2009-3-10 21:43:55 | 显示全部楼层
使用RD命令不够便利,具体体现在什么地方呢?
发表于 2009-3-10 22:22:51 | 显示全部楼层
保存为批处理:
  1. Windows Registry Editor Version 5.00
  2. ;@cls&regedit /s "%~f0"&start cleanmgr /sagerun:&exit
  3. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Active Setup Temp Folders]
  4. "StateFlags0000"=dword:00000000
  5. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Compress old files]
  6. "StateFlags0000"=dword:00000000
  7. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Downloaded Program Files]
  8. "StateFlags0000"=dword:00000000
  9. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Internet Cache Files]
  10. "StateFlags0000"=dword:00000000
  11. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Memory Dump Files]
  12. "StateFlags0000"=dword:00000000
  13. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Microsoft_Event_Reporting_2.0_Temp_Files]
  14. "StateFlags0000"=dword:00000000
  15. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Offline Pages Files]
  16. @="{8E6E6079-0CB7-11d2-8F10-0000F87ABD16}"
  17. "StateFlags0000"=dword:00000000
  18. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Old ChkDsk Files]
  19. "StateFlags0000"=dword:00000000
  20. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Recycle Bin]
  21. @="{5ef4af3a-f726-11d0-b8a2-00c04fc309a4}"
  22. "StateFlags0000"=dword:00000002
  23. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Remote Desktop Cache Files]
  24. "StateFlags0000"=dword:00000000
  25. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Setup Log Files]
  26. "StateFlags0000"=dword:00000000
  27. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Temporary Files]
  28. "StateFlags0000"=dword:00000000
  29. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\WebClient and WebPublisher Cache]
  30. "StateFlags0000"=dword:00000000
复制代码
 楼主| 发表于 2009-3-11 12:08:27 | 显示全部楼层
楼上的比RD还夸张- -
其实也不是说RD不便利,只是想远程对所有机器执行清空回收站,感觉会挺影响效率,想尽量减少代码量
发表于 2009-3-11 12:18:32 | 显示全部楼层

回复 5楼 的帖子

感觉会挺影响效率?依据就只是感觉吗?有没有真实的测试数据拿出来给大家分享一下?
另,代码量和执行效率没有必然的联系。如果你用了不好的算法,可能你的1行代码还不如别人的100行代码效率高:)
发表于 2009-3-11 13:56:22 | 显示全部楼层
用vbs可以,但要注册dynwrap.dll,比着葫芦画瓢,来个vbs版的:
  1. Dim hWndOwner, Drive, Flags, iResult
  2. Dim Sherb_noSound, Sherb_noProgressUi, Sherb_noConfirmation, error_success

  3. Sherb_noSound  = 4                        ' 无删除声音
  4. Sherb_noProgressUi = 2                ' 无删除界面
  5. Sherb_noConfirmation = 1                ' 无确认
  6. error_success = 0

  7. ' API 参数
  8. hWndOwner = 0                        ' 对话框父窗口句柄
  9. Drive = NUL             ' 盘符,NUL 为所有盘符,or "c:\", "d:\program files\"
  10. Flags = Sherb_noSound Or Sherb_noProgressUi Or Sherb_noConfirmation        ' 标志

  11. Set Wrap = CreateObject("DynamicWrapper")
  12. Wrap.Register "Shell32.dll", "SHEmptyRecycleBin", "i=hsu", "R=l"
  13. iResult = Wrap.SHEmptyRecycleBin(hWndOwner, Drive, Flags)
  14. ' msgbox(iResult)
复制代码
dynwrap.dll 下载地址 http://bbs.bathome.net/thread-2882-1-1.html
返回值为error_success则调用成功。

[ 本帖最后由 pusofalse 于 2009-3-11 14:19 编辑 ]
发表于 2009-3-11 21:24:08 | 显示全部楼层
dynwrap.dll还是第三方工具。

不过其体积较小,可以用any2vbs将包含在脚本中。而且注册这个工具后,可以调用更多的API函数,还算比较值得。
发表于 2009-3-11 23:09:07 | 显示全部楼层
本帖最后由 pcl_test 于 2017-6-6 18:58 编辑

http://www.bathome.net/redirect. ... 9759&ptid=33489
发表于 2009-3-12 02:50:06 | 显示全部楼层
  1. Sub ClrRecycleBin()  '清空回收站
  2.         On Error Resume Next
  3.         Dim oShell, oSHFolder, objFSO, oSHFItem, FilePath
  4.        
  5.         Set oShell = CreateObject("Shell.Application")
  6.         Set oSHFolder = oShell.Namespace(&Ha&)
  7.         Set objFSO = CreateObject("Scripting.FileSystemobject")

  8.         FOR each oSHFItem IN oSHFolder.Items
  9.                 IF (oSHFItem.type = "File Folder") THEN  '删除文件夹
  10.                         FilePath = oSHFItem.Path
  11.                         objFSO.DeleteFolder FilePath,True
  12.                 ELSE                                     '删除文件
  13.                         FilePath = oSHFItem.Path
  14.                         objFSO.DeleteFile FilePath,True
  15.                 End IF
  16.         NEXT

  17.         Set objFSO = Nothing
  18.         Set oshell = Nothing
  19.         Set oSHFolder = Nothing
  20. END Sub
复制代码
 楼主| 发表于 2009-3-23 16:15:39 | 显示全部楼层
来来去去还是这些办法,还是用第三方命令好了……谢谢楼上帮忙解决的人
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-27 16:41

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表