手动删除和删除脚本之间的区别? (蝙蝠或vbs)

我目前正在尝试自动删除程序的文件,而运行该程序。 如果我在Windows中手动删除文件,该程序确实会识别这些更改,但是如果使用脚本删除文件,则不能识别这些更改。

所有的文件被删除,但。 我尝试了一个bat和一个vbs脚本,手动执行脚本和/或通过程序内的调用执行脚本 – 总是有相同的结果:手动删除被识别,脚本删除没有。 我应该提到,我可以从LUA 4.0中调用一个脚本/可执行文件来自动删除这些文件。

如果我在Windows中删除一个文件,究竟发生了什么事情,并且与脚本删除有什么不同? 有没有办法100%模仿Windows删除例程? 还是有一些秘密的'文件夹更新'旗,我不知道? 自然文件夹属性DateLastAccessedDateLastModified被更新。

为了完整起见,这里是我的脚本(他们删除任何现有的文件拟合*Random*.level和删除空文件夹):

蝙蝠:

 REM delete all "Random" maps del /S *Random*.level REM remove empty folders for /f "delims=" %%d in ('dir /S /B /A:D ^| sort /r') do rd "%%d" 

VBS:

 ' create shell Set objShell = CreateObject("Wscript.Shell") ' get current path strPath = objShell.CurrentDirectory ' create file system object Set oFSO = CreateObject("Scripting.FileSystemObject") ' delete all random level files ProcessSubFolders oFSO.GetFolder(strPath) Sub ProcessSubFolders(oFolder) ' get all files in the folder Set cFiles = oFolder.Files ' for every file For Each oFile In cFiles ' check if it's a level file and has "Random" in its name If Right(oFile.Name, Len(".level")) = ".level" And InStr(oFile.Name, "Random") Then ' if true delete it oFile.Delete End If Next ' process all subfolders in the same manner For Each oSubFolder In oFolder.SubFolders ProcessSubFolders oSubFolder Next ' if folder is empty If oFolder.SubFolders.Count = 0 And oFolder.Files.Count = 0 Then ' delete it oFolder.Delete End If End Sub 

Shell.Application对象能够像手动启动一样执行文件系统操作。 例如, Folder.CopyHere方法允许通过将文件复制到Windows压缩文件夹中来创建压缩文件 。 你会看到文件复制进度条和一切。

所以通过扩展,使用相同的Shell.Application对象执行文件删除的行为与手动文件删除的行为是一致的。 下面是我写的一个简短的JScript脚本来测试我的理论:

 var shl = new ActiveXObject("Shell.Application"); var items = shl.NameSpace("c:\\users\\me\\desktop").Items(); for (var i=0; i<items.Count; i++) { if (/\.tmp$/i.test(items.Item(i).Name)) { WSH.Echo('deleting ' + items.Item(i).Name); items.Item(i).InvokeVerb('delete'); } } 

…从我的桌面删除* .tmp。 不幸的是,对于它遇到的每一个.tmp文件,我都会得到一个确认窗口对话框,询问“你确定要把这个文件发送到回收站吗? 粗略的调查, 我看到的唯一的解决方法是,而不是删除文件,将文件移动到临时文件夹,然后删除该文件夹。 我不确定这是否能满足你的条件,但我认为这是值得实验的。