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

C# 使用Windows命令删除文件并显示已删除文件的列表,c#,windows,cmd,del,C#,Windows,Cmd,Del,我想从具有模式的文件夹中删除文件。我使用的是一个C#程序,它调用Windows命令并打印该命令的日志。当前我正在使用此命令: del Test\*xyz*/s 使用/s开关,我可以得到日志中删除的文件列表。但是/s开关也会从我不想要的子目录中删除文件。有没有办法删除文件并获取文件列表?如果我理解您的问题正确,您希望删除文件夹中的文件(子目录中没有文件)。可以通过在批处理文件中使用-循环来实现这一点 对于您的用例,您可以将以下内容写入批处理(.bat)文件: 循环遍历dir命令结果中的每一行,并

我想从具有模式的文件夹中删除文件。我使用的是一个C#程序,它调用Windows命令并打印该命令的日志。当前我正在使用此命令:

del Test\*xyz*/s

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

如果我理解您的问题正确,您希望删除文件夹中的文件(子目录中没有文件)。可以通过在批处理文件中使用-循环来实现这一点

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

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

正如循环的文档所述:

  • 迭代和文件解析

    使用文件解析来处理命令输出、字符串和文件内容。使用迭代变量定义要检查的内容或字符串,并使用各种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>]
    
    for/f[“”]{%%|%}in()do[]
    对于(“”)do[]中的/f[“ParsingKeywords”]{%%|%}
    对于(“”)do[]中的/f[“”]{%%|%}
    
因此,在上面的示例中,我们使用了上一个版本(使用命令的输出)。 指定的命令就是命令

正如该命令的文件所述:

/b
显示目录和文件的裸列表,不显示其他信息/b/w

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

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

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

因此,您需要将
/b
用于文件名的裸列表,并将
/a-d
用于排除结果列表中可能的目录

另一方面:您也可以使用普通C#实现这些功能。如果你需要帮助,请告诉我;-)

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>]