我希望批處理腳本根據文件的文件屬性執行特定的命令。例如:如果文件屬性=這樣批量執行此操作
If attrib %windir%\system32\bcrypt.dll RH (
echo This is read only, and hidden!
) else (
echo These file attributes don't match what I was looking for!
)
謝謝!
我希望批處理腳本根據文件的文件屬性執行特定的命令。例如:如果文件屬性=這樣批量執行此操作
If attrib %windir%\system32\bcrypt.dll RH (
echo This is read only, and hidden!
) else (
echo These file attributes don't match what I was looking for!
)
謝謝!
類型FOR /?
有關如何獲取文件屬性的信息。對於分配給文件的FOR
變量,比如%f
,可以使用%~af
獲取其屬性。因此,要檢查是否爲R和H屬性:
setlocal enabledelayedexpansion
for %%f in ("%windir%\system32\bcrypt.dll") do (
set attributes=%%~af
if "!attributes:h=!" neq "!attributes!" echo File is hidden.
if "!attributes:r=!" neq "!attributes!" echo File is read-only.
)
警告:如果文件是隱藏的,你需要在for
命令明確命名它。如果使用通配符,它將不會找到該文件。
@echo off
setlocal enableDelayedExpansion
for /f "tokens=* delims=" %%a in ('attrib "%windir%\system32\bcrypt.dll"') do (
set "attributes=%%a"
set "attributes=!attributes:~0,13!"
)
set "HR=%attributes:~4,2%"
if "!HR!" equ "HR" (
echo attributes matching
) else (
echo attributes not matching
)
H和R分別位於屬性的第5和第6位置。如果他們被設置,你需要按照這個順序檢查它們。
@echo off
setlocal enableextensions disabledelayedexpansion
for %%a in ("%windir%\system32\bcrypt.dll") do (
set "RO_AND_H=1"
(for /f "tokens=2 delims=r" %%b in ("%%~aa") do break) || set "RO_AND_H="
(for /f "tokens=2 delims=h" %%b in ("%%~aa") do break) || set "RO_AND_H="
if defined RO_AND_H (
echo File is readonly and hidden
) else (
echo File attributes don't match
)
)
正如已經指出的,在~a
修飾符for
替換參數的返回文件的屬性列表中,有九個破折號的字符串,每個人被替換了一封信給信號屬性的存在(更多here) 。
FILE_ATTRIBUTE_DIRECTORY d--------
FILE_ATTRIBUTE_READONLY -r-------
FILE_ATTRIBUTE_ARCHIVE --a------
FILE_ATTRIBUTE_HIDDEN ---h-----
FILE_ATTRIBUTE_SYSTEM ----s----
FILE_ATTRIBUTE_COMPRESSED -----c---
FILE_ATTRIBUTE_OFFLINE ------o--
FILE_ATTRIBUTE_TEMPORARY -------t-
FILE_ATTRIBUTE_REPARSE_POINT --------l
FILE_ATTRIBUTE_NORMAL ---------
對於所需的每個屬性,代碼使用標記化的有用屬性作爲分隔符,並嘗試獲取第二令牌此字符串。
如果該屬性設置,名單一分爲二,並會有第二令牌,所以for /f
命令被執行的do
子句中的代碼(break
用來只是什麼都不做)。
如果不存在,則行中的屬性將不被分裂,不會有第二令牌,則do
子句中的代碼將不被處理,並且故障標記將被設置,由條件操作者||
(運行釣到下一個命令如果以前失敗)清除標誌變量。
謝謝所有回答! :) – ditheredtransparency