代码之家  ›  专栏  ›  技术社区  ›  shinzou

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

  •  1
  • shinzou  · 技术社区  · 9 年前

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

    我找不到不复制粘贴同一行并稍作修改的例子。

    关于 rmdir ,我必须做吗 cd 到当前文件夹?因为它说下面的代码中有语法错误:

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

    编辑3:我认为现在它删除了以下内容: del /s /f /a:h /a:a *.jpg

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

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

    1 回复  |  直到 8 年前
        1
  •  2
  •   dbenham    9 年前

    未经测试,但我相信以下方法会奏效:

    @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"
      )
    )