背景
删除分散在不同目录中的一组文件。
问题
以下代码不起作用(未转义|
会导致问题);
for %i in (dir /s/b | find "lock") do echo del %i
问题
如果不编写批处理文件,如何删除find
当前目录和所有子目录(包括隐藏目录)中所有名为“lock”的文件(即使用命令找到的文件)?
谢谢你!
答案1
您的代码需要一些修改。管道运算符需要通过批处理转义字符进行转义^
,并且在命令的括号内使用引号时,usebackq
必须指定选项。
批次格式:
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
当您希望它真正删除文件时,请将其替换echo
为del
及其任何选项。请注意,在 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”例如是包含要删除的字符串的文件名。