我目前正在尝试在运行程序时自动删除该程序的文件。如果我在 Windows 中手动删除文件,程序确实会识别更改,但如果我使用脚本删除文件,则不能。
不过,所有文件都会被删除。我尝试了一个bat和一个vbs脚本,手动执行脚本和/或通过程序内的调用执行脚本 - 总是得到相同的结果:手动删除被识别,脚本删除不被识别。我应该提到的是,对我来说很重要的是,我可以从 LUA 4.0 调用自动删除文件的脚本/可执行文件。
如果我在 Windows 中删除文件,到底会发生什么?这与通过脚本删除有何不同?有没有办法100%模拟Windows删除例程?或者是否有一些我不知道的 secret “文件夹已更新”标志?自然文件夹属性 DateLastAccessed
和 DateLastModified
已更新。
为了完整起见,这里是我的脚本(它们删除任何适合 *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
对象能够执行文件系统操作,就像 manually initiated 一样。 。例如,Folder.CopyHere
方法允许通过将文件复制到其中来创建 zip 文件 Windows Compressed Folders 。您会看到文件复制进度条和所有内容。
因此,推而广之,使用相同的 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 文件,我都会收到一个确认窗口对话框,询问“您确定要将此文件发送到回收站吗?”经过粗略调查,only workaround I've seen是将文件移动到临时文件夹,然后删除该文件夹,而不是删除文件。我不确定这是否能满足您的条件,但我认为值得尝试。
关于windows - 手动删除和脚本删除的区别?! (bat 或 vbs),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15549642/