我想从带有模式的文件夹中删除文件。我正在使用C#程序,该程序调用Windows命令并打印命令的日志。目前,我正在使用以下命令:
del Test\*xyz* /s
使用/ s开关,我获得了在日志中删除的文件列表。但是/ s开关还会从不需要的子目录中删除文件。有没有办法删除文件并获取文件列表?
答案 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#实现这些功能。如果您需要帮助,请告诉我;-)