ZetCode

VBScript Delete 方法

最后修改于 2025 年 4 月 9 日

VBScript 中的 Delete 方法是 FileSystemObject 的一部分。它会永久删除文件系统中的文件或文件夹。此方法功能强大,应谨慎使用,因为已删除的项目无法恢复。它通常用于文件清理操作。

Delete 可以删除文件和文件夹,并提供递归删除的选项。它会永久擦除数据,不会将其发送到回收站。本教程将通过实际示例涵盖 Delete 方法,以演示其在各种场景下的用法。

Delete 方法概述

Delete 方法在 FileFolder 对象上都可用。它接受一个可选参数来强制删除只读项。该方法会永久删除指定的文件系统对象。删除前不会请求确认。

主要功能包括即时永久删除和递归删除文件夹。它不支持通配符 - 必须指定确切的路径。如果目标不存在或正在使用中,Delete 会抛出错误。了解此方法有助于创建有效的文件管理脚本。

删除单个文件

此示例演示了 Delete 删除单个文件的最简单用法。它展示了基本的文件删除和错误处理。该脚本在尝试删除之前会检查文件是否存在。

delete_file.vbs
Set fso = CreateObject("Scripting.FileSystemObject")
filePath = "C:\Temp\old_report.txt"

If fso.FileExists(filePath) Then
    Set file = fso.GetFile(filePath)
    file.Delete
    WScript.Echo "File deleted successfully"
Else
    WScript.Echo "File does not exist"
End If

Set fso = Nothing

该脚本创建一个 FileSystemObject 并检查文件是否存在。如果找到,它会获取一个 File 对象并调用 Delete。文件将被永久删除,无需确认。为避免错误,请始终在删除前验证其存在。

强制删除只读文件

此示例演示了如何使用强制参数删除只读文件。当 Delete 的第二个参数设置为 True 时,它会覆盖只读属性。这可确保无论文件属性如何都可以删除。

force_delete.vbs
Set fso = CreateObject("Scripting.FileSystemObject")
filePath = "C:\Temp\protected_file.txt"

If fso.FileExists(filePath) Then
    Set file = fso.GetFile(filePath)
    file.Delete True ' Force deletion
    WScript.Echo "Read-only file deleted"
Else
    WScript.Echo "File not found"
End If

Set fso = Nothing

该脚本尝试删除一个可能为只读的文件。True 参数会强制删除,无论其属性如何。这在清理可能被标记为只读的系统生成文件时非常有用。请谨慎使用。

删除空文件夹

此示例演示了删除空目录。如果文件夹包含文件,Delete 方法会失败。通过此方法只能删除完全为空的文件夹。该脚本包含存在性检查。

delete_folder.vbs
Set fso = CreateObject("Scripting.FileSystemObject")
folderPath = "C:\Temp\EmptyFolder"

If fso.FolderExists(folderPath) Then
    Set folder = fso.GetFolder(folderPath)
    folder.Delete
    WScript.Echo "Folder deleted successfully"
Else
    WScript.Echo "Folder does not exist"
End If

Set fso = Nothing

该脚本在尝试删除之前检查文件夹是否存在。如果找到且为空,则会被永久删除。对于非空文件夹,将发生错误。此方法对于清理脚本中的临时目录很有用。

递归删除文件夹

此示例展示了如何递归删除文件夹及其所有内容。FileSystemObjectDeleteFolder 方法处理此操作。第二个参数强制删除文件夹内的只读项。

recursive_delete.vbs
Set fso = CreateObject("Scripting.FileSystemObject")
folderPath = "C:\Temp\OldProject"

If fso.FolderExists(folderPath) Then
    fso.DeleteFolder folderPath, True
    WScript.Echo "Folder and contents deleted"
Else
    WScript.Echo "Folder not found"
End If

Set fso = Nothing

该脚本使用 DeleteFolder 删除文件夹及其所有内容。True 参数强制删除只读项。这功能强大但也很危险 - 请确保指定了正确的路径。适用于完整清理操作。

使用通配符删除多个文件

虽然 Delete 不直接支持通配符,但我们可以结合使用 FileSystemObject 方法来实现。此示例演示了如何在目录中删除匹配模式的多个文件。

wildcard_delete.vbs
Set fso = CreateObject("Scripting.FileSystemObject")
folderPath = "C:\Temp\Logs"
filePattern = "*.bak"

If fso.FolderExists(folderPath) Then
    Set folder = fso.GetFolder(folderPath)
    For Each file In folder.Files
        If LCase(fso.GetExtensionName(file.Name)) = "bak" Then
            file.Delete
            WScript.Echo "Deleted: " & file.Name
        End If
    Next
Else
    WScript.Echo "Folder not found"
End If

Set fso = Nothing

该脚本枚举目录中的所有文件,并删除匹配模式的文件。这里我们检查文件扩展名,但也可以使用其他条件。这种方法比直接支持通配符提供了更多的控制。适用于日志文件轮换和清理。

来源

FileSystemObject 文档

在本文中,我们探讨了 VBScript 中的 Delete 方法,涵盖了其用法和实际应用。从单个文件删除到递归文件夹删除,这些示例展示了文件系统清理技术。通过这些知识,您可以在脚本中实现强大的文件管理。

作者

我叫 Jan Bodnar,是一名热情的程序员,拥有多年的编程经验。我从 2007 年开始撰写编程文章。到目前为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面有八年以上的经验。

列出所有 VBScript 教程