![](/img/trans.png)
[英]How to get file name of an icon file in a folder for creating/updating desktop.ini for folder(s)?
[英]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"
)
)
)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.