파일의 파일 특성에 따라 특정 명령을 실행하는 배치 스크립트가 필요합니다. 예 :File 속성 = this 일괄 처리
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!
)
감사합니다.
파일의 파일 특성에 따라 특정 명령을 실행하는 배치 스크립트가 필요합니다. 예 :File 속성 = this 일괄 처리
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
)
)
으로 이미 for
대체 매개 변수의 ~a
수정은 파일의 속성 목록, 그들 각각의 속성의 존재를 알리기 위해 문자로 교체 구 대시 문자열을 반환, 지적 (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 ---------
각 필수 속성에 대해 코드는 wanted 속성을 구분 기호로 사용하여이 문자열을 토큰 화하고 두 번째 토큰을 검색하려고합니다. 속성이 설정되어있는 경우
목록 둘로되고 두 번째 토큰이있을 것이다, 그래서 실행되는 for /f
명령의 do
절에있는 코드 (break
는 아무것도하지 않고 그냥 사용된다).
속성이없는 경우 줄이 분할되지 않고 두 번째 토큰이 없으며 do
절의 코드가 처리되지 않고 조건 플래그 ||
에 의해 catch 된 오류 플래그가 설정됩니다 (run 이전 명령이 실패한 경우 다음 명령) 플래그 변수를 지우십시오.
답변 해 주신 모든 분들께 감사드립니다! :) – ditheredtransparency