【问题标题】:Delete files using a Windows command and display the list of deleted files使用 Windows 命令删除文件并显示已删除文件的列表
【发布时间】:2018-10-29 20:43:04
【问题描述】:

我想从带有模式的文件夹中删除文件。我正在使用一个调用 Windows 命令并打印命令日志的 C# 程序。目前我正在使用这个命令:

del Test\*xyz* /s

使用 /s 开关,我得到了在日志中被删除的文件列表。但是 /s 开关也会从我不想要的子目录中删除文件。有没有办法删除文件并获取文件列表?

【问题讨论】:

    标签: c# windows cmd del


    【解决方案1】:

    如果我对您的问题的理解正确,您想删除文件夹中的文件(子目录中没有文件)。您可以通过在批处理文件中使用for-loop 来实现此目的。

    对于您的用例,您可以将以下内容写入批处理 (.bat) 文件:

    @ECHO OFF
    
    for /f %%i in ('dir Test\*xyz* /b /a-d') do (
      echo %%i
      del %%i
    )
    

    循环遍历dir 命令结果中的每一行,并将文件名打印到控制台。之后就被删除了。

    正如for-loop 的文档所述:

    • 迭代和文件解析

      使用文件解析来处理命令输出、字符串和文件内容。使用迭代变量来定义您要检查的内容或字符串,并使用各种 ParsingKeywords 选项来进一步修改解析。使用 ParsingKeywords 标记选项来指定哪些标记应作为迭代变量传递。 请注意,当不使用令牌选项时,/f 将只检查第一个令牌。

      文件解析包括读取输出、字符串或文件内容,然后将其分解为单独的文本行,并将每一行解析为零个或多个标记。然后使用设置为标记的迭代变量值调用 for 循环。默认情况下,/f 从每个文件的每一行传递第一个空格分隔的标记。空白行被跳过。

      语法是:

      for /f ["<ParsingKeywords>"] {%%|%}<Variable> in (<Set>) do <Command> [<CommandLineOptions>]
      for /f ["ParsingKeywords"] {%%|%}<Variable> in ("<LiteralString>") do <Command> [<CommandLineOptions>]
      for /f ["<ParsingKeywords>"] {%%|%}<Variable> in ('<Command>') do <Command> [<CommandLineOptions>]
      

    所以在上面的例子中,我们使用了最后一个版本(使用了命令的输出)。 指定的命令是dir 命令。

    正如dir 命令的文档所述:

    /b 显示目录和文件的裸列表,没有其他信息。 /b 覆盖 /w。

    和

    /a[[:]&lt;Attributes&gt;] 仅显示具有您指定属性的目录和文件的名称。如果省略 /a,dir 将显示除隐藏文件和系统文件之外的所有文件的名称。如果使用 /a 而不指定 Attributes,则 dir 会显示所有文件的名称,包括隐藏文件和系统文件。

    以下列表描述了可用于属性的每个值。使用冒号 (:) 是可选的。使用这些值的任意组合,不要用空格分隔这些值。

    d 目录
    h 隐藏文件
    s 系统文件
    l 重新解析点
    r 只读文件
    a 文件准备就绪归档
    i非内容索引文件
    -前缀表示“不”

    所以您需要使用/b 来作为文件名的裸列表,并使用/a-d 来排除结果列表中可能存在的目录。

    附带说明:您也可以使用纯 C# 来实现这些目标。如果您需要帮助,请告诉我 ;-)

    【讨论】:

      猜你喜欢
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 2011-12-11
      • 1970-01-01
      相关资源
      最近更新 更多