【问题标题】:vbscript reads File object properties, but won't delete the filevbscript 读取文件对象属性,但不会删除文件
【发布时间】:2023-10-07 02:55:01
【问题描述】:

这是我的(非常简单的)代码:

if fs.FileExists(strPath) then
    set thisFile=fs.GetFile(strPath)
    wscript.echo thisFile.Name & " (" & thisFile.Size & ") will be deleted" 
    thisFile.Delete
end if

路径是正确的,因为我可以在输出中读取文件名和文件大小。但是,这是我得到的输出:

D:\Inetpub>cscript PDFDelete.vbs

Microsoft (R) Windows 脚本宿主版本 5.8

版权所有 (C) Microsoft Corporation。保留所有权利。

131_1443_cds101711.pdf (28660) 将被删除

D:\Inetpub\PDFDelete.vbs(38, 3) Microsoft VBScript 运行时错误:找不到文件

如您所见,我在文件属性上得到了正确的输出,所以我知道我有一个对文件对象的有效引用,但是尝试在该完全相同的文件对象上执行 Delete() 方法会产生一个“文件未找到”错误?!

这对我来说毫无意义。如果我只是访问文件的名称和大小属性,怎么会“找不到”文件?

编辑我应该提到,当我第一次收到“未找到文件”错误时,我最初使用的是代码“fs.DeleteFile(strPath)”。我把它改成了更直接的“File.Delete()”方法,但错误仍然存​​在。

【问题讨论】:

    标签: vbscript filesystemobject wsh


    【解决方案1】:

    你可以试试:

    if fs.FileExists(strPath) then
      set thisFile=fs.GetFile(strPath)
      wscript.echo thisFile.Name & " (" & thisFile.Size & ") will be deleted" 
      fs.DeleteFile strPath
    end if
    

    http://www.devguru.com/technologies/vbscript/14055

    【讨论】:

    • 这实际上是我的第一批代码,它抛出了同样的“找不到文件”错误,所以我切换到 File.Delete - 没有任何区别
    【解决方案2】:

    我发现了问题。

    在尝试删除该文件后,在引用 thisFile.Size 的脚本的下方有一行杂散的代码。错误发生在该行,而不是 thisFile.Delete 行。

    故事的寓意:从一开始就利用 On Error Resume Next/On Error Goto 0 错误捕获,事情变得更加清晰。

    【讨论】:

    • 不要通过 atrocius(全局)OERN 隐藏错误,您应该注意错误消息中的行号。
    • 或者我可以从一开始就编写完美、无错误的代码。你知道,只要我们说的是血腥显而易见的......我所说的只是使用一些基本的错误处理,“残暴”或其他,帮助我查明问题。