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

[文件操作] 【已解决】求助--XP 下 删除文件进回收站代码 自动完成 【BAT VBS PY】

[复制链接]
发表于 2026-4-30 17:48:10 | 显示全部楼层 |阅读模式
本帖最后由 wzehu 于 2026-5-11 23:22 编辑

在 XP 系统中:
         1,BAT CMD  没有 删除文件进回收站命令,只能物理删除。
         2, XP下Python3.4.4  依赖第三方库。
               send2trash和winshell 不能自动捕获确认弹窗。甚至不适配XP
         3, VBS 有删除文件进回收站方法,但会弹出确认窗口。

               下面代码无法自动关闭弹窗:
                     代码功能:先新建123.txt ,随后删除123.txt 到回收站。
                VBS-1
               
Set fso = CreateObject("Scripting.FileSystemObject")
strFile = "123.txt"

If fso.FileExists(strFile) Then
    Set shell = CreateObject("Shell.Application")
    Set folder = shell.NameSpace(fso.GetParentFolderName(fso.GetAbsolutePathName(strFile)))
    Set file = folder.ParseName(fso.GetFileName(strFile))
    file.InvokeVerb "delete"
End If

                VBS-2

strFile = "123.txt"
Set Ws = CreateObject("WScript.Shell")
Set sh=CreateObject("Shell.Application")
Set fso=CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(strFile) Then fso.CreateTextFile strFile,True
Set fd=sh.NameSpace(fso.GetParentFolderName(fso.GetAbsolutePathName(strFile))).ParseName(strFile)
fd.InvokeVerb "delete"

WScript.Sleep 200
Ws.AppActivate("确认文件删除"):Ws.SendKeys "{ENTER}"

’Ws.Run "taskkill /f /im WScript.exe",0
即使杀掉WScript.exe 进程也不能关闭弹窗

                                                                            求大佬指点迷津。拜托 致谢!

============================================================
   
【已解决】:   sa.namespace(10).movehere v(i), 84

   致谢 好友:  @aloha20200628         @czjt1234
发表于 2026-4-30 20:30:28 | 显示全部楼层
本帖最后由 aloha20200628 于 2026-5-1 17:02 编辑

一楼的 vbs 代码可简化如下

test.vbs
  1. set sa=createobject("shell.application") : set f="c:\test\123.txt"
  2. sa.namespace(10).movehere f, 84
复制代码


再试试以下的 jscript 代码,存为 test.js
用法》从资源管理器选择一个或多个文件(目录)拖拽给 test.js 文件,即可把所选文件目录移入回收站。

test.js
  1. v=WSH.arguments, sa=WSH.createObject("Shell.Application");
  2. if (v.length==0) WSH.quit();
  3. for (i=0,l=v.length; i<l; i++) sa.Namespace(10).MoveHere(v(i), 84);
  4. WSH.quit();
复制代码

评分

参与人数 1技术 +1 收起 理由
cutebe + 1 乐于助人

查看全部评分

发表于 2026-5-1 15:48:30 | 显示全部楼层
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer]
"ShellState"=hex:24,00,00,00,37,a8,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,0d,00,00,00,00,00,00,00,02,00,00,00,

这是把回收站的属性,显示删除确认对话框,的勾去掉
实测导入后立即生效,不需要刷新桌面什么的

然后测试你一楼的vbs就可以了
你自己加个导入注册表

如果需要可以删除后再恢复注册表
 楼主| 发表于 2026-5-1 16:41:06 | 显示全部楼层
czjt1234 发表于 2026-5-1 15:48
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer]
"ShellState"=hex:24,00,00,00, ...



在回收站右键就能设置 不弹出确认对话框
修改回收站属性后,原代码 不用点确认了,也能正常删除文件进回收站.
每次运行原代码前后就修改回收站属性一次太麻烦了,比点 确认 还不方便.
                                                                  谢谢网友参与.[玫瑰]

 楼主| 发表于 2026-5-1 16:42:50 | 显示全部楼层
czjt1234 发表于 2026-5-1 15:48
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer]
"ShellState"=hex:24,00,00,00, ...

在回收站右键就能设置 不弹出确认对话框
修改回收站属性后,原代码 不用点确认了,也能正常删除文件进回收站.
每次运行原代码前后就修改回收站属性一次太麻烦了,比点 确认 还不方便.
                                                                  谢谢网友参与.[玫瑰]
 楼主| 发表于 2026-5-1 16:55:01 | 显示全部楼层
aloha20200628 发表于 2026-4-30 20:30
试试以下 jscript 代码,存为 test.js
用法》从资源管理器选择一个或多个文件(目录)拖拽给 test.js 文件 ...

回复 @aloha20200628

sa = WSH.CreateObject("Shell.Application");
sa.Namespace(10).MoveHere(".\\123.txt");

WSH.quit();

在XP 系统中 运行一次能 删除123.txt进回收站.
再一次运行就没反应了.不知什么原因...
     好友五.一快乐
发表于 2026-5-1 16:55:38 | 显示全部楼层
Sends files to the Recycle bin: Recyle v1.5
https://www.bathome.net/thread-2059-1-1.html
(出处: 批处理之家)
发表于 2026-5-1 16:59:43 | 显示全部楼层
wzehu 发表于 2026-5-1 16:41
在回收站右键就能设置 不弹出确认对话框
修改回收站属性后,原代码 不用点确认了,也能正常删除文件进回收 ...

你不会设置自动导入注册表?
发表于 2026-5-1 18:33:22 | 显示全部楼层
本帖最后由 aloha20200628 于 2026-5-1 19:37 编辑
wzehu 发表于 2026-5-1 16:55
回复 @aloha20200628

sa = WSH.CreateObject("Shell.Application");


一定要用第二个参数 84 (取消确认+取消进度显示+覆盖回收站已有重名项+允许撤销)或 92(取消确认+取消进度显示+遭遇重名会自动重命名+允许撤销),如下
   sa.Namespace(10).MoveHere("c:\\test\\123.txt",84);

   sa.Namespace(10).MoveHere("c:\\test\\123.txt",92);

Namespace(10).MoveHere 对不存在的文件目录会直接忽略...

评分

参与人数 1技术 +1 收起 理由
wzehu + 1 乐于助人

查看全部评分

发表于 2026-5-2 09:49:05 | 显示全部楼层
aloha20200628 发表于 2026-4-30 20:30
一楼的 vbs 代码可简化如下

test.vbs

这个我在win7测试成功,但在winxp_professional_x86_sp3测试失败
加了以管理员权限运行也没用

zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74070.iso
发表于 2026-5-2 09:55:22 | 显示全部楼层
czjt1234 发表于 2026-5-2 09:49
这个我在win7测试成功,但在winxp_professional_x86_sp3测试失败
加了以管理员权限运行也没用

找到原因了,加个延时就可以了
wsh.Sleep1000
 楼主| 发表于 2026-5-3 14:02:45 | 显示全部楼层
czjt1234 发表于 2026-5-2 09:55
找到原因了,加个延时就可以了
wsh.Sleep1000

你好,你能贴上能在XP SP3 运行的那段代码吗?
因 论坛改版我还不在适应,
好多功能都不会操作,
不能加好友,也不能发消息。
 楼主| 发表于 2026-5-3 14:02:45 | 显示全部楼层
czjt1234 发表于 2026-5-2 09:55
找到原因了,加个延时就可以了
wsh.Sleep1000

你好,你能贴上能在XP SP3 运行的那段代码吗?
因 论坛改版我还不在适应,
好多功能都不会操作,
不能加好友,也不能发消息。
 楼主| 发表于 2026-5-3 14:19:44 | 显示全部楼层
aloha20200628 发表于 2026-5-1 18:33
一定要用第二个参数 84 (取消确认+取消进度显示+覆盖回收站已有重名项+允许撤销)或 92(取消确认+取消 ...

我这还是第一次接触JS,也就两三天。
我发现XP 对WSH 不是很友好。
现在正在摸索中。。。
让好友见笑了。[害羞]
发表于 2026-5-3 17:51:04 | 显示全部楼层
wzehu 发表于 2026-5-3 14:02
你好,你能贴上能在XP SP3 运行的那段代码吗?
因 论坛改版我还不在适应,
好多功能都不会操作,
  1. Dim oFSO, oShell, oFolder, s, i

  2. s = "123.txt"

  3. Set oFSO = CreateObject("Scripting.FileSystemObject")
  4. Set oShell = CreateObject("Shell.Application")
  5. Set oFolder = oShell.NameSpace(10)
  6. If wsh.Arguments.Count > 0 Then
  7.     For Each i In wsh.Arguments
  8.         Call del(i)
  9.     Next
  10. Else
  11.     del s
  12. End If
  13. wsh.Sleep 1000

  14. Sub del(s)
  15.     s = oFSO.GetAbsolutePathName(s)
  16.     oFolder.MoveHere s, 84
  17. End Sub
复制代码

评分

参与人数 1技术 +1 收起 理由
wzehu + 1 感谢分享

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-25 06:41

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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