簡體   English   中英

如何設置每個包含desktop.ini的文件夾的系統屬性?

[英]How to set the system attribute of each folder that contains a desktop.ini?

我使用軟件將硬盤備份到其他硬盤。 該軟件首先找到差異,然后將它們鏡像到備份HDD。 不幸的是,它會忽略文件夾的系統屬性。 這是一個問題,因為許多文件夾都具有修改后的圖標,只有在設置了文件夾的系統屬性時才顯示這些圖標。

若要更正此問題,我想找到所有受影響的文件夾。 這些是包含一個desktop.ini文件的文件,因此應設置此類文件夾的系統屬性。

我知道如何設置文件夾的系統屬性,但是我不知道如何有條件地遞歸地進行設置:

D:\>attrib +s ExampleDirectory

我想我需要Windows批處理腳本,但是我不確定,因為我對批處理編程一無所知。

如果您確實要堅持使用備份工具(顯然不能正確處理屬性),則可以使用基於/D /R的以下代碼for包含文件Desktop.ini所有目錄重新應用System屬性:

for /D /R "D:\path\to\root\dir" %%D in ("*") do (
    if exist "%%~D\Desktop.ini" (
        if not exist "%%~D\Desktop.ini\" (
            attrib +S "%%~D"
        )
    )
)

需要兩個嵌套的if語句才能將System屬性應用於包含名為Desktop.ini的文件的目錄,但不適用於包含具有該名稱的目錄的目錄(盡管這種情況不太可能發生); 第一if條件文件和目錄匹配,第二個也not匹配的目錄(注意結尾\\ )。

無論如何,也許您應該切換到另一個可以正確處理所有屬性的備份工具,例如robocopy ,這是注釋建議的。


上面的方法不能正確處理隱藏項目,因為for /D無法識別隱藏目錄,並且attrib不會更改隱藏文件的System屬性。 為了克服這個問題,需要像下面這樣修改代碼:

for /F "delims=" %%D in ('dir /B /S /A:D "D:\path\to\root\dir\*"') do (
    if exist "%%~D\Desktop.ini" (
        if not exist "%%~D\Desktop.ini\" (
            set "HIDDEN=%%~aD"
            setlocal EnableDelayedExpansion
            if not "!HIDDEN!"=="!HIDDEN:h=!" (
                endlocal
                attrib -H "%%~D"
                attrib +H +S "%%~D"
            ) else (
                endlocal
                attrib +S "%%~D"
            )
        )
    )
)

這利用了~a修飾符for變量引用和子字符串替換

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM