現在、プログラムの実行中にプログラムのファイルを自動的に削除しようとしています。Windows でファイルを手動で削除した場合、プログラムは変更を認識しますが、スクリプトを使用してファイルを削除した場合は認識しません。
ただし、すべてのファイルが削除されます。私はバットとvbsスクリプトを試し、スクリプトを手動で、および/またはプログラム内からの呼び出しによって実行しました-常に同じ結果が得られました.手動削除は認識され、スクリプトによる削除は認識されません. ファイルを自動的に削除するスクリプト/実行可能ファイルを LUA 4.0 から呼び出すことができることが重要です。
Windows でファイルを削除すると正確にはどうなりますか? また、スクリプトによる削除とどのように違いますか? Windows の削除ルーチンを 100% エミュレートする方法はありますか? それとも、私が知らない秘密の「フォルダーが更新されました」というフラグがありますか? 自然なフォルダーのプロパティ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