尝试以递归方式删除设定大小的.exe文件 - 但VBscript不是我的强项,任何人都可以看到它不能递归工作的明显原因吗?
OPTION EXPLICIT
DIM strFolder
DIM objFSO
strFolder = "C:\TESTFOLDER"
set objFSO = createobject("Scripting.FileSystemObject")
RecursiveDelete strFolder
wscript.echo "Finished"
sub RecursiveDelete(byval strDirectory)
DIM objFolder, objSubFolder, objFile
set objFolder = objFSO.GetFolder(strDirectory)
for each objFile in objFolder.Files
if ( RIGHT(UCASE(objFile.Path),4) = ".EXE" ) AND (file.Size == 47232 ) then
wscript.echo "Deleting:" & objFile.Path
objFile.Delete
end if
next
for each objSubFolder in objFolder.SubFolders
RecursiveDelete objSubFolder.Path
next
end sub
答案 0 :(得分:2)
此:
if ( RIGHT(UCASE(objFile.Path),4) = ".EXE" ) AND (file.Size == 47232 ) then
应该是:
if ( RIGHT(UCASE(objFile.Path),4) = ".EXE" ) AND (objFile.Size = 47232 ) then
答案 1 :(得分:0)
它在做什么或不做什么告诉你它不起作用?
一个提示:暂时注释掉if语句,然后打印每个文件夹和访问过的文件,以确保递归发生。然后重新启用if语句,但注释掉delete语句,并让它打印匹配的文件名。
换句话说,确认它正在按照您的想法行事。
我看到的其他东西,正如Ekkehard刚刚提到的,VBScript不使用双等号来测试相等。
经过一些测试:
你在这里重新打字了吗?因为这段代码甚至没有按照给定的那样运行。
除了导致VBScript编译语法错误的双等号之外,您还在该语句中引用“file”,但在任何地方都没有声明此类变量。
我将其更改为objFile,注释掉了删除语句,并删除了第二个等号,此代码确实按照您的预期运行并递归。
我还在一个文件夹中创建了一些测试文件并重新启用了delete语句,并删除了测试文件。
因为我们不知道你遇到了什么实际的麻烦,这就像我现在所建议的那样多。