2017-02-09 1 views
1

파일의 파일 특성에 따라 특정 명령을 실행하는 배치 스크립트가 필요합니다. 예 :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! 
) 

감사합니다.

+0

답변 해 주신 모든 분들께 감사드립니다! :) – ditheredtransparency

답변

2

파일 특성을 얻는 방법은 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 명령에 명시 적으로 이름을해야합니다. 와일드 카드를 사용하면 파일을 찾지 못합니다.

2
@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 위에 있습니다. 설정되어있는 경우 순서대로 확인해야합니다.

2
@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 이전 명령이 실패한 경우 다음 명령) 플래그 변수를 지우십시오.