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