배치 파일에서 디스크/파티션 크기 가져오기

배치 파일에서 디스크/파티션 크기 가져오기

얻는 방법총합 크기배치 파일에 디스크 또는 파티션(1개의 NTFS 파티션이 있는 USB 하드 드라이브)이 있습니까?
나는 1TB 드라이브이고 크기를 결정하는 데 오랜 시간이 걸릴 수 있기 때문에 파일을 재귀적으로(/f를 사용하는 것) 처리하는 논리를 선택하지 않을 것입니다.

배치 파일의 크기를 반환하는 작은 타사 도구를 사용할 수 있습니다.

PS: 저는 Windows 7 x64 Ultimate를 사용하고 있습니다.

답변1

이 작업을 수행하는 더 쉬운 방법이 있을 수 있지만 여기에 제가 사용하는 방법이 있습니다.

원하는 것이 바이트뿐이라면 이 명령을 수행하여 T를 외부 드라이브 문자로 변경할 수 있습니다(명령 프롬프트에서 한 줄의 경우 및 %%로 변경 ) .%set space=echo

for /f "tokens=3 delims= " %%a in ('dir /-c T: ^| find "bytes free"') do set space=%%a

그런 다음 이를 단순화하고 싶다면 먼저 각 크기에 대한 지침을 설정하세요.

set divide=1073741824&&set size=gigabytes
if %space% lss 1073741824 set divide=1048576&&set size=megabytes
if %space% lss 1048576 set divide=1024&&set size=kilobytes
if %space% lss 1024 set divide=1&&set size=bytes

그런 다음 배치가 수학을 처리할 수 없으므로 임시 VBS 스크립트를 작성합니다.

echo wsh.echo cdbl(%space%)/%divide% > %temp%\tmp.vbs

실행하고 결과를 캡처한 후 삭제하세요.

for /f %%a in ('cscript //nologo %temp%\tmp.vbs') do set space=%%a
del %temp%.\tmp.vbs

그런 다음 다음은 결과를 소수점 이하 두 자리로 자릅니다.

for /f "tokens=1,2 delims=." %%a in ("%space%") do (
  set s1=%%a
  set s2=%%b
)
if not "%s2%"=="" (set space=%s1%.%s2:~0,2%) else (set space=%s1%)

에코 결과

echo Drive has %space% %size% free.

[편집하다]

을 위한크기에 따라 diskpart 목록 볼륨을 사용할 수 있습니다( "%%a"=="T"로 변경 "%%a"=="driveletterhere").

for /f "tokens=3,6,7 delims= " %%a in ('echo list volume ^| diskpart') do if "%%a"=="T" set size=%%b && set size2=%%c

그리고 보너스 계산 방법은 다음과 같습니다.

if [%size2%]==[TB] (
    set isBigEnough=1
) else if [%size2%]==[GB] (
    if %size% GTR 31 set isBigEnough=1
)
if not defined isBigEnough set isBigEnough=0

답변2

어쩌면 df.exe다음에서 사용할 수 있는 것을 시도해 보세요.http://unxutils.sourceforge.net/그리고 다른 위치. 이것은 UNIX 명령줄 도구의 복사본입니다.

또한 WMI(Windows Management Interface)에서 직접 값을 얻을 수 있어야 합니다. 하지만 해당 영역에 대한 제 기술이 직접적인 답변을 제공할 만큼 충분하지는 않습니다.

fsutil volume diskfree c:find원하는 결과를 얻기 위해 on을 사용할 수 있는 3줄의 출력이 제공됩니다 .

예제 출력:

Total # of free bytes        : 466333454336
Total # of bytes             : 972999880704
Total # of avail free bytes  : 466333454336

fsutil volume diskfree c: | find "Total # of bytes"특정 라인을 제공합니다.

for /F "tokens=2 delims=:" %i in ('fsutil volume diskfree c: ^| find "Total # of bytes"') do @set USED=%i

앞에 공백이 있는 숫자를 제공합니다.

비교를 위해:

@REM 32MB = 32*1024*1024 bytes
@set COMP=33554432

@REM Pull out the line containing the number of bytes USED
for /F "tokens=2 delims=:" %i in ('fsutil volume diskfree c: ^| find "Total # of bytes"') do @set USED=%i

@REM Drop the leading space character to just get the number so a numeric comparison is done
for /F "tokens=1 delims= " %i in ('echo %USED%') do @set USED=%i

@REM Tell me something useful
if %USED% lss %COMP% @echo "Used is less than 32MB"
if %USED% gtr %COMP% @echo "Used is greater than 32MB"

참고: fsutil에는 관리자 권한이 필요하므로 잠겨 있는 컴퓨터에서는 작동하지 않을 수 있습니다.

관련 정보