Windows 명령 줄 (GB)의 디스크 공간 확보


12

서버의 C : \ 드라이브 (로컬 실행 스크립트)의 총 크기와 여유 공간을 가져 오기 위해 배치 파일을 만들려고합니다. 또한 출력을 쉽게 읽을 수 있어야하므로 바이트가 작동하지 않으므로 temp .vbs 파일을 만드는 명령 줄을 사용하는 것이 좋습니다.

다음은 작동하는 것처럼 보이지만 서식 / 수학이 올바르지 않습니다.

setlocal
for /f "tokens=6" %a in ('fsutil volume diskfree C: ^| find "of bytes"') do set diskspace=%a
echo wsh.echo FormatNumber(cdbl(%diskspace%)/1024, 0) > %temp%.\tmp.vbs
for /f %a in ('cscript //nologo %temp%.\tmp.vbs') do set diskspace=%a
del %temp%.\tmp.vbs
echo For example %diskspace%

위의 명령은 여유 공간 만 표시합니다 ... 전체 크기도 원합니다 ... 다음 명령이 정보를 가져 오는 데 더 좋을지 궁금합니다.

WMIC LOGICALDISK GET Name,Size,FreeSpace | find /i "C:"

또한이 파일을 명령 프롬프트 (배치 파일이 아닌 강제 요구 사항)에 직접 복사 / 붙여 넣을 수 있기를 바랍니다. 위 코드에서 이미 "%%"를 제거했습니다.

참고 : Server 2003+에서 기본적으로 실행해야합니다 (따라서 타사 유틸리티뿐만 아니라 Powershell도 종료 됨).


어떤 버전의 창?
EBGreen

기본적으로 Server 2003 이상 이것을 반영하여 원래 게시물을 업데이트하십시오.
BondUniverse

답변:


10

언더 되지 배치 파일 - 강제 요구 사항 절, 다음 cmd한 줄은 도움이 될 수 :

for /f "tokens=1-3" %a in ('WMIC LOGICALDISK GET FreeSpace^,Name^,Size ^|FINDSTR /I /V "Name"') do @echo wsh.echo "%b" ^& " free=" ^& FormatNumber^(cdbl^(%a^)/1024/1024/1024, 2^)^& " GiB"^& " size=" ^& FormatNumber^(cdbl^(%c^)/1024/1024/1024, 2^)^& " GiB" > %temp%\tmp.vbs & @if not "%c"=="" @echo( & @cscript //nologo %temp%\tmp.vbs & del %temp%\tmp.vbs

출력 :

==>for /f "tokens=1-3" %a in ('WMIC LOGICALDISK GET FreeSpace^,Name^,Size ^|FIND
STR /I /V "Name"') do @echo wsh.echo "%b" ^& " free=" ^& FormatNumber^(cdbl^(%a^
)/1024/1024/1024, 2^)^& " GiB"^& " size=" ^& FormatNumber^(cdbl^(%c^)/1024/1024/
1024, 2^)^& " GiB" > %temp%\tmp.vbs & @if not "%c"=="" @echo( & @cscript //nolog
o %temp%\tmp.vbs & del %temp%\tmp.vbs

C: free=79,11 GiB size=111,45 GiB

D: free=929,47 GiB size=931,51 GiB

==>

11

지금은 VBS로보고 있지만 PowerShell은이를 매우 쉽게 수행 할 수 있습니다.

$disk = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='C:'" | Select-Object Size, FreeSpace

Write-Host ("{0}GB total" -f [math]::truncate($disk.Size / 1GB))
Write-Host ("{0}GB free" -f [math]::truncate($disk.FreeSpace / 1GB))

첫 번째 줄은 WMI에서 디스크 정보를 가져오고 (이 예에서는 C : 만 수행함) 여유 공간 및 총 크기 만 선택합니다.

다음 두 줄에서 여유 공간 및 총 크기를 콘솔에 씁니다 (GB 단위로 포맷 됨).

출력 예 (있는 그대로) :

223GB total
125GB free

1
Powershell은 2003 년에 기본으로 제공되지 않으므로 사용할 수 없으므로 Server 2003+에서 기본적으로 작동해야합니다. Powershell을 사용하면 더 쉬울 것입니다!
BondUniverse

3

배치 파일에서 DiskPart 스크립트를 사용하여 지정된 디스크 의 디스크 크기 ( GB) 를 얻을 수 있습니다 . 이 예에서는 모델 이름에 따라 특정 디스크 인덱스를 설정합니다 (컴퓨터에 하나만 있다고 가정). 디스크 드라이브 모델과 일치 하도록 문자열 " SATA Disk "를 변경하십시오 . cmd에서 " wmic diskdrive get Model, Index " 명령을 실행하여 모델 이름을 얻을 수 있습니다 .

물론 wmic 명령에서 다른 디스크 속성을 사용할 수 있습니다. wmic diskdrive get /? 사용할 수있는 모든 디스크 속성 목록을 가져옵니다.

for /f %%I in ('wmic diskdrive get Model^, Index ^| find "SATA Disk"') do set DISK_Index=%%I

if not exist %~dp0Disk_Size.script (echo list disk > %~dp0Disk_Size.script)
@echo off
FOR /F "tokens=4 delims= " %%J in ('diskpart /s %~dp0Disk_Size.script ^| find "Disk %DISK_Index%"') do set DISK_SIZE=%%J
IF %ERRORLEVEL% EQU 1 (echo No Data was processed, cannot get DISK_SIZE)

echo DISK_SIZE is %DISK_SIZE% GB

3

드라이브에 충분한 여유 공간이 있는지 확인 해야하는 경우 (예 : 무언가를 설치하거나 복사하기 위해) 다음과 같이 wmic 쿼리를 시도 할 수 있습니다.

wmic LogicalDisk where "DeviceID='c:' and FreeSpace > 10737418240" get DeviceID 2>&1 ^ | find /i "c:" >nul || (echo not enough space&exit 1)

C에서 10Gb 미만의 여유 공간이 있으면 배치 파일 실행이 중단됩니다.


2

1024로 나누면 킬로바이트 (2 ^ 10)가됩니다. 1024 x 1024로 나누면 바이트 (2 ^ 20)가됩니다. 1024 x 1024 x 1024로 나누면 기가 바이트 (2 ^ 30)가됩니다.

Windows는 역사적인 이유로 이러한 단위를 킬로바이트, 메가 바이트 및 기가 바이트라고합니다. 내 케이스가 맞다고 생각합니다.

따라서 합계를 변경하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.