2015-07-19 107 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

相關問題