2015-07-19 86 views
1

我想删除当前文件夹和所有子文件夹中的所有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

+0

您需要使用'rmdir'指定要删除的目录。您不能删除当前目录。您需要切换到其他目录,这不是目录的子目录,然后使用目录名称将其删除。所有你需要的是'rmdir/s/q c:\ foo'。它将删除目录'c:\ foo'和所有子目录中的所有内容,包括只读,隐藏或系统文件。 –

+0

@RossRidge我想删除当前和所有子文件夹中的空文件夹。不是'rmdir'与bash中的相同,只删除空文件夹? – shinzou

+0

'rmdir/s/q'就像'rm -rf'。它消除了一切。 –

回答

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" 
) 
) 
+0

I haven没有时间来测试它,但是是否有可能从所有文件夹中删除所有属性? – shinzou

+0

@ kuhaku - 'attrib -r -h -s */d/s'会从所有文件和文件夹中删除属性。但我认为你不想更改未被删除的文件或文件夹。顺便说一句,我不明白“我没有时间测试”的说法。如果没有,那么你没有时间编程。 – dbenham

+0

我没有用于那些属性。通过删除所有属性,它现在清除了更多的文件,但它看起来像不能清除只读文件夹。那么你的答案中的'for'循环会清除它们。 我很专注于其他的东西,这就是为什么我没有时间。谢谢您的帮助。 – shinzou

相关问题