问题描述
|
试图递归删除设置大小的.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
解决方法
这个:
if ( RIGHT(UCASE(objFile.Path),4) = \".EXE\" ) AND (file.Size == 47232 ) then
应该:
if ( RIGHT(UCASE(objFile.Path),4) = \".EXE\" ) AND (objFile.Size = 47232 ) then
,它在做什么或不做什么告诉您它不起作用?
提示:暂时将if语句注释掉,并使其打印每个访问的文件夹和文件,以确保递归正在发生。然后重新启用if语句,但注释掉delete语句,并使其打印匹配的文件名。
换句话说,请验证它是否正在按照您认为的方式运行。
正如Ekkehard刚才提到的那样,我看到了别的东西,VBScript不使用双等号来测试相等性。
经过一些测试:
您在这里重新输入吗?因为此代码甚至没有按给定的方式运行。
除了导致VBScript编译语法错误的双等号之外,您还可以在该语句中引用\“ file \”,但是在任何地方都没有声明这样的变量。
我将其更改为objFile,注释了delete语句,并删除了第二个等号,并且此代码确实按预期运行并递归。
我还在文件夹中创建了一些测试文件,然后重新启用了delete语句,然后删除了测试文件。
因此,由于我们不知道您遇到的实际麻烦,因此,这大概是我现在可以建议的程度。