删除所有设置为隐藏或只读或系统的文件

时间:2015-07-19 21:11:12

标签: windows batch-file syntax delete-file

我想删除当前文件夹和所有子文件夹中的所有jpgini以及更多类型,然后删除所有空文件夹(递归)。其中一些文件是只读或隐藏的,甚至设置为系统,因此只有del /s *.jpg不能删除它们。问题是,当我这样做时,语法似乎使用了逻辑anddel /a:h /a:r /s *.jpg因此只删除了隐藏文件,而不仅删除了隐藏文件。有没有办法让它改为使用逻辑or

我无法找到使其正常工作的示例,而无需通过较小的更改粘贴相同的行。

关于rmdir,是否必须对当前文件夹执行cd?因为它说下面的代码中存在语法错误:

del /s *.jpg
del /a:h /a:r /s *.jpg
rmdir /s /q
pause

EDIT3:我认为现在它删除所有内容:del /s /f /a:h /a:a *.jpg

我发现这是为了删除空文件夹,但如果文件夹设置为只读则它不起作用:

https://superuser.com/a/39679/451485

1 个答案:

答案 0 :(得分:2)

未经测试,但我相信以下内容可行:

@echo off

:: Remove readonly / hidden / system attributes from all files of interest
attrib -r -h -s *.jpg /s
attrib -r -h -s *.ini /s
rem etc...

:: Delete the files of interest
del /s *.jpg *.ini

:: for each folder, sorted descending by full path (children come before parent)
for /f "delims=" %%F in ('dir /b /ad /s *^|sort /r') do (
  REM check if folder is empty
  dir /b /a "%%F" | findstr "^" >nul || (
    REM remove directory with /S /Q works, even if folder is read only
    rd /s /q "%%F"
  )
)