壞的程序在每個子目錄中留下幾個「.data」隱藏文件夾。如何用批處理遞歸刪除特定的隱藏子文件夾
到目前爲止,我已經試過這一點,這是行不通的......
RD /ah /s /q "D:\This Folder\.data"
我有很多文件夾和子文件夾,每個人心中都有一個「.DATA」隱藏文件夾中有我會喜歡刪除。如果有幫助,我想刪除所有隱藏的文件夾,因爲它們都是「.data」。
壞的程序在每個子目錄中留下幾個「.data」隱藏文件夾。如何用批處理遞歸刪除特定的隱藏子文件夾
到目前爲止,我已經試過這一點,這是行不通的......
RD /ah /s /q "D:\This Folder\.data"
我有很多文件夾和子文件夾,每個人心中都有一個「.DATA」隱藏文件夾中有我會喜歡刪除。如果有幫助,我想刪除所有隱藏的文件夾,因爲它們都是「.data」。
@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
命令。
@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
刪除該文件夾。
您需要''delims =「'或''tokens = *」'子句來防止包含空格的路徑出現問題,因爲'for/f'可替換參數只會檢索第一個空格/製表符分隔的標記。與在if命令中使用引號相同,'rd'命令中的文件夾引用也需要引號以防止空格或特殊字符出現問題。 –
你說得對,thx。我會編輯我的答案。 – MichaelS
閱讀您在輸入/時獲得的內容。然後:
使用/ 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"
爲什麼我們需要'SETLOCAL ENABLEEXTENSIONS disabledelayedexpansion'? – MichaelS
@MichaelS,禁用了擴展名「for/f」無法識別。雖然通常的配置是讓它們默認啓用,但我發現它已被更改的情況。啓用延遲擴展(是的,通常的配置被禁用,但並非總是如此),代碼可能會在包含感嘆號的路徑中出現問題。兩個參數都由'setlocal'命令控制。所以,爲了防止出現問題,我習慣於包含聲明運行代碼所需的精確配置。 –
好的,很高興知道。謝謝! – MichaelS