2015-11-04 76 views
1

壞的程序在每個子目錄中留下幾個「.data」隱藏文件夾。如何用批處理遞歸刪除特定的隱藏子文件夾

到目前爲止,我已經試過這一點,這是行不通的......

RD /ah /s /q "D:\This Folder\.data" 

我有很多文件夾和子文件夾,每個人心中都有一個「.DATA」隱藏文件夾中有我會喜歡刪除。如果有幫助,我想刪除所有隱藏的文件夾,因爲它們都是「.data」。

回答

3
@echo off 
    setlocal enableextensions disabledelayedexpansion 
    for /f "delims= eol=" %%a in (' 
     dir /adh /s /b 2^>nul 
    ') do if /i "%%~nxa"==".data" echo rd /s /q "%%~fa" 

此執行dir命令來檢索裸格式(/b)隱藏目錄(/ahd)的遞歸(/s)名單。該列表由for /f命令處理,該命令將檢查每個匹配是否爲.data文件夾。如果符合條件,則文件夾及其內容將被刪除。

noterd命令只會回顯到控制檯。如果輸出正確,請刪除echo命令。

+0

爲什麼我們需要'SETLOCAL ENABLEEXTENSIONS disabledelayedexpansion'? – MichaelS

+2

@MichaelS,禁用了擴展名「for/f」無法識別。雖然通常的配置是讓它們默認啓用,但我發現它已被更改的情況。啓用延遲擴展(是的,通常的配置被禁用,但並非總是如此),代碼可能會在包含感嘆號的路徑中出現問題。兩個參數都由'setlocal'命令控制。所以,爲了防止出現問題,我習慣於包含聲明運行代碼所需的精確配置。 –

+0

好的,很高興知道。謝謝! – MichaelS

1
@ECHO OFF 
for /f "tokens=*" %%F in ('dir /s /b /o:n /adh') do (
    if "%%~nxF"==".data" rd /s /q "%%F" 
) 

dir /s /b /o:n /adh爲您提供了跳過文件的所有文件夾和子文件夾。 for /f遍歷所有這些文件夾。 %%~nxF從整個路徑中提取最後一個文件夾名稱,以便我們檢查它是否爲.data。如果是這種情況rd /s /q %%F刪除該文件夾。

+2

您需要''delims =「'或''tokens = *」'子句來防止包含空格的路徑出現問題,因爲'for/f'可替換參數只會檢索第一個空格/製表符分隔的標記。與在if命令中使用引號相同,'rd'命令中的文件夾引用也需要引號以防止空格或特殊字符出現問題。 –

+0

你說得對,thx。我會編輯我的答案。 – MichaelS

0

閱讀您在輸入/時獲得的內容。然後:

使用/ d

FOR /D %variable IN (set) DO command [command-parameters] 

    If set contains wildcards, then specifies to match against directory 
    names instead of file names. 

和/ R開關一起

FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters] 

Walks the directory tree rooted at [drive:]path, executing the FOR 
statement in each directory of the tree. If no directory 
specification is specified after /R then the current directory is 
assumed. If set is just a single period (.) character then it 
will just enumerate the directory tree. 

要掃描的文件夾recursivly

for /d /r . %%a in (data*) do rd /s /q "%%a" 
相關問題