使用Windows命令删除文件并显示已删除文件的列表

时间:2018-10-29 20:43:04

标签: c# windows cmd del

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

del Test\*xyz* /s

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

1 个答案:

答案 0 :(得分:1)

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

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

@ECHO OFF

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

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

作为for循环状态的文档:

  
      
  • 迭代和文件解析

         

    使用文件解析来处理命令输出,字符串和文件内容。使用迭代变量定义要检查的内容或字符串,并使用各种 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[[:]<Attributes>] 仅显示具有您指定属性的那些目录和文件的名称。如果省略/ a,则dir显示除隐藏文件和系统文件以外的所有文件的名称。如果使用/ a而不指定属性,则dir显示所有文件的名称,包括隐藏文件和系统文件。

     

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

     

d目录
  h隐藏的文件
  s系统文件
  l重新分配点
  r只读文件
  a个可以存档的文件
  i不包含索引文件
  -前缀的意思是“不是”

因此,您需要使用/b来表示文件名,而/a-d则要在结果列表中排除可能的目录。

附带说明:您还可以使用普通C#实现这些功能。如果您需要帮助,请告诉我;-)