背景

背景

背景

删除分散在不同目录中的一组文件。

问题

以下代码不起作用(未转义|会导致问题);

for %i in (dir /s/b | find "lock") do echo del %i

问题

如果不编写批处理文件,如何删除find当前目录和所有子目录(包括隐藏目录)中所有名为“lock”的文件(即使用命令找到的文件)?

谢谢你!

答案1

您的代码需要一些修改。管道运算符需要通过批处理转义字符进行转义^,并且在命令的括号内使用引号时,usebackq必须指定选项。

for /?

批次格式:

for /f "usebackq" %%i in (`dir /s /b ^| find "lock"`) do echo %%i

命令行格式:

for /f "usebackq" %i in (`dir /s /b ^| find "lock"`) do echo %i

当您希望它真正删除文件时,请将其替换echodel及其任何选项。请注意,在 bat 文件中使用时需要双百分号,在命令行上直接使用时则需要单个百分号。

另一种方法是使用forfiles命令。forfiles /?

forfiles /m *lock* /s /c "cmd /c echo @file"

笔记,这两种方法也会删除任何包含搜索词的文件夹lock。需要采取其他步骤来防止这种情况发生。

答案2

对于给定的驱动器和/或路径(也在子文件夹中查找):

del /f /s /q c:\windows\lock

答案3

大卫·鲁曼答案不适用于包含空格的路径!您可以使用:

for /f "usebackq delims=" %i in (`dir /s /b ^| find "lock"`) do del "%i" 

如果您有 hinned 文件,您可以使用:

for /f "usebackq delims=" %i in (`dir /s /b /a ^| find "lock"`) do del "%i" /A:H

答案4

另一种选择是直接使用 del 命令,如下所示:

del /s c:\directory\*_gdiplus*.*

其中“_gdiplus”例如是包含要删除的字符串的文件名。

相关内容