2013-03-21 61 views
1

我目前正在嘗試在運行程序時自動刪除程序的文件。如果我在Windows中手動刪除文件,程序確實會識別這些更改,但如果使用腳本刪除文件,則而不是手動刪除和刪除腳本之間的區別? (蝙蝠或vbs)

但是,所有文件都被刪除。我嘗試了一個bat和一個vbs腳本,手動執行腳本和/或通過程序內的調用執行腳本 - 總是得到相同的結果:手動刪除被識別,腳本刪除沒有。我應該提到,我可以從LUA 4.0中調用一個腳本/可執行文件來自動刪除這些文件,這對我來說很重要。

如果我在Windows中刪除一個文件並且與腳本刪除有什麼不同,會發生什麼?有沒有辦法100%模仿windows刪除程序?或者是有一些祕密'文件夾更新'旗,我不知道?自然文件夾屬性DateLastAccessedDateLastModified得到更新。

爲了完整起見,這裏是我的腳本(它們刪除任何現有的文件安裝到*Random*.level和刪除空文件夾):

BAT:

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 
+0

這兩個腳本都應該像「手動」刪除一樣刪除文件。請發佈代碼,而不是「識別」刪除。 – 2013-03-21 14:28:57

回答

3

Shell.Application對象能夠執行文件系統操作,就像它們是manually initiated一樣。例如,Folder.CopyHere方法允許通過將文件複製到Windows Compressed Folders來創建zip文件。您會看到文件複製進度欄和所有內容。

因此,通過擴展,使用相同的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不是刪除文件,而是將文件移動到臨時文件夾,然後刪除該文件夾。我不確定這是否會滿足您的條件,但我認爲這是值得嘗試的。

相關問題