繁体   English   中英

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

[英]Delete files using a Windows command and display the list of deleted files

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

del Test\*xyz* /s

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

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

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

@ECHO OFF

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

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

正如for循环的文档所述:

  • 迭代和文件解析

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

    文件解析包括读取输出、字符串或文件内容,然后将其分解为单独的文本行并将每一行解析为零个或多个标记。 然后使用设置为标记的迭代变量值调用 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 而不指定 Attributes,dir 将显示所有文件的名称,包括隐藏文件和系统文件。

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

d目录
h隐藏文件
s系统文件
l解析点
r只读文件
a准备存档a文件
i不是内容索引文件
-前缀意思是“不是”

所以你需要使用/b作为文件名的裸列表和/ad来排除结果列表中可能的目录。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM