CMD 셸의 여유 공간


95

타사 응용 프로그램을 설치하지 않고도 CMD에서 디스크 또는 폴더의 여유 디스크 공간을 확보하는 방법이 있습니까?

큰 파일을 주어진 디렉토리에 복사하는 CMD가 있고 물론 복사 명령에서 오류 수준 반환을 사용할 수 있지만 파일을 복사하는 데 걸리는 시간을 기다려야합니다 (예 : 디스크가 꽉 찼고 복사 작업이 실패 함).

어떤 아이디어인지 카피를 시작하기 전에 알고 싶습니다. Sysinternals에서 DU.EXE 유틸리티를 시도했지만 점유 공간 만 표시됩니다.


"타사 설치"는 "추가 소프트웨어 설치"를 의미한다고 가정해야합니다. 제공하거나 설치할 필요가없는 실용적인 측면. 온보드 수단만을 의미합니다.
Alexander Stohr

답변:


112

" dir c:\" 을 실행 하면 마지막 줄에 사용 가능한 디스크 공간이 표시됩니다.

편집 : 더 나은 솔루션 : " fsutil volume diskfree c:"


1
또한 마운트 지점에서도 작동하지만 dir에는 해당되지 않습니다!
LogicDaemon 2014-10-06

2
Dir은 잘 작동하지만 드라이브가 비어 있으면 더미 파일을 만들어야합니다. 그 밖에, 그것은 (<3 개 리에게 :) 드라이브 여유 공간을 제공하지 않습니다
Balmipour

사용 가능한 바이트 수를 얻는 방법이 있습니까?
미나 야곱

또한 루트 디렉토리를 제외하고 dir ..*(또는 dir c:\thing\..*) 디렉토리에 파일이 없거나 많은지 여부에 관계없이 매우 짧은 목록이 표시됩니다.
azhrei

fsutil 방식은 IMDisk RAM 드라이브와 같은 가상 드라이브에서 작동하지 않을 수 있습니다. 당신은 얻을 것입니다 : 오류 : 잘못된 기능. FSUTIL 유틸리티에는 로컬 NTFS 볼륨이 필요합니다.
user2846246 apr

51

가능한 해결책 :

dir|find "bytes free"

Windows Xp 이상을위한 보다 " 고급 솔루션 ":

wmic /node:"%COMPUTERNAME%" LogicalDisk Where DriveType="3" Get DeviceID,FreeSpace|find /I "c:"

Windows 관리 계측 명령 줄 (WMIC) 도구 (Wmic.exe를)은 윈도우 서버 2003뿐만 아니라 Windows XP 또는 Vista 약 방대한 양의 정보를 수집 할 수 있습니다. 이 도구는 WMI (Windows Management Instrumentation)를 사용하여 기본 하드웨어에 액세스합니다. Windows 2000 용이 아닙니다.


Alexander Stohr 가 의견에서 언급했듯이 :

  • WMIC는 정책 기반 제한도 볼 수 있습니다. ( ' dir'이 여전히 작업을 수행하더라도),
  • ' dir'는 로케일에 따라 다릅니다.

5
WMI의 경우 +1. 유일한 안정적인 솔루션이어야합니다. 특정 언어 (찾기를 위해)에 의존하는 것은 아마도 나쁜 생각 일 것입니다. :)
Joey

: 다음 사용할 수있는 변수 하나에 여유 공간을 넣으려면@FOR /F "tokens=2 delims==" %%S IN ('wmic /NODE:"%COMPUTERNAME%" LogicalDisk Where ^(DriveType^="3" and DeviceID^="%some_folder:~0,2%"^) Get FreeSpace /VALUE') DO @SET freespace=%%S
다보르 Josipovic

3
@Pacerier : fsutil당신이 무엇을하고 있든 상관없이 실행하려면 관리자 권한이 필요 했던 기억 이납니다.
Joey


1
@AlexanderStohr 좋은 지적입니다. 더 많은 가시성을 위해 답변에 귀하의 의견을 포함했습니다.
VonC

8

이 명령을 사용하여 모든 파티션, 크기 및 여유 공간을 찾을 수 있습니다. wmic logicaldisk get size, freespace, caption


7

DIR 명령에서 / -C를 사용하여 쉼표를 피할 수 있습니다.

FOR /F "usebackq tokens=3" %%s IN (`DIR C:\ /-C /-O /W`) DO (
    SET FREE_SPACE=%%s
)
ECHO FREE_SPACE is %FREE_SPACE%

사용 가능한 공간을 필요한 공간과 비교하려면 다음과 같이 할 수 있습니다. 천 단위 구분 기호로 숫자를 지정한 다음 제거했습니다. 쉼표 없이는 숫자를 파악하기 어렵습니다. SET / A는 좋지만 큰 숫자로 작동하지 않습니다.

SET EXITCODE=0
SET NEEDED=100,000,000
SET NEEDED=%NEEDED:,=%

IF %FREE_SPACE% LSS %NEEDED% (
    ECHO Not enough.
    SET EXITCODE=1
)
EXIT /B %EXITCODE%

6

다음 스크립트는 드라이브의 여유 바이트를 제공합니다.

@setlocal enableextensions enabledelayedexpansion
@echo off
for /f "tokens=3" %%a in ('dir c:\') do (
    set bytesfree=%%a
)
set bytesfree=%bytesfree:,=%
echo %bytesfree%
endlocal && set bytesfree=%bytesfree%

dir이는 명령 의 출력에 따라 다르며 형식의 여유 공간이 포함 된 마지막 줄이 필요합니다 24 Dir(s) 34,071,691,264 bytes free. 구체적으로 특별히:

  • 마지막 줄이어야합니다 (또는 모든 줄 for에 대한 설정 bytesfree에 의존하지 않고 명시 적으로 줄을 감지하도록 루프를 수정할 수 있습니다 ).
  • 여유 공간은 세 번째 "단어"여야합니다 (또는 tokens=비트를 변경하여 다른 단어를 얻을 수 있음).
  • 천 단위 구분 기호는 ,문자입니다 (또는 쉼표에서 다른 것으로 대체 할 수 있음).

환경 네임 스페이스를 오염시키지 않고 종료시 bytesfree변수 만 설정합니다 . 귀하의 경우 dir출력이 다른 (예를 들어, 다른 로케일 또는 언어 설정), 당신은 스크립트를 조정해야합니다.


6

df.exe

모든 디스크를 표시합니다. 총, 사용 및 여유 용량. 다양한 명령 줄 옵션으로 출력을 변경할 수 있습니다.

http://www.paulsadowski.com/WSH/cmdprogs.htm , http://unxutils.sourceforge.net/ 또는 다른 곳 에서 얻을 수 있습니다 . du와 같은 표준 유닉스 유틸리티입니다.

df -h드라이브의 사용 및 사용 가능한 디스크 공간이 모두 표시됩니다. 예를 들면 :

M:\>df -h
Filesystem      Size  Used Avail Use% Mounted on
C:/cygwin/bin   932G   78G  855G   9% /usr/bin
C:/cygwin/lib   932G   78G  855G   9% /usr/lib
C:/cygwin       932G   78G  855G   9% /
C:              932G   78G  855G   9% /cygdrive/c
E:              1.9T  1.3T  621G  67% /cygdrive/e
F:              1.9T  201G  1.7T  11% /cygdrive/f
H:              1.5T  524G  938G  36% /cygdrive/h
M:              1.5T  524G  938G  36% /cygdrive/m
P:               98G   67G   31G  69% /cygdrive/p
R:               98G   14G   84G  15% /cygdrive/r

Cygwin은 https://www.cygwin.com/ 에서 무료로 사용할 수 있습니다 . 명령 프롬프트에 많은 강력한 도구를 추가합니다. M 드라이브의 사용 가능한 공간 만 얻으려면 (Windows에서 공유 드라이브에 매핑 된대로) 다음을 입력 할 수 있습니다.

M:\>df -h | grep M: | awk '{print $4}'

2
왜 당신이 약 탈당했는지 아십니까? 질문을주의 깊게 읽지 않기 때문입니다. 읽기 :«일부 타사 응용 프로그램을 설치할 필요없이». 개인적으로 unxutils를 좋아하지만 여기서는 답이 아닙니다.
LogicDaemon 2014 년

7
OP 외에 여기 오는 사람들에게는 여전히 괜찮은 대답입니다
Peter

1

사용 paxdiablo 탁월한 솔루션 좀 드라이브는 까다로운 (그러나 아름다움) 길에있는 경우 사용이 들어오는 인수로 편지와 수표를 운전보다 정교한 배치 스크립트를, 비트 썼다 :

@echo off
setlocal enableextensions enabledelayedexpansion
set chkfile=drivechk.tmp
if "%1" == "" goto :usage
set drive=%1
set drive=%drive:\=%
set drive=%drive::=%
dir %drive%:>nul 2>%chkfile%
for %%? in (%chkfile%) do (
  set chksize=%%~z?
)
if %chksize% neq 0 (
  more %chkfile%
  del %chkfile%
  goto :eof
)
del %chkfile%
for /f "tokens=3" %%a in ('dir %drive%:\') do (
  set bytesfree=%%a
)
set bytesfree=%bytesfree:,=%
echo %bytesfree% byte(s) free on volume %drive%:
endlocal

goto :eof
:usage
  echo.
  echo   usage: freedisk ^<driveletter^> (eg.: freedisk c)

참고 1 : 간단한 문자 (예 : x)를 입력하거나 x : 또는 x : \ 형식을 인수의 드라이브 문자로 사용할 수 있습니다.

참고 2 : 스크립트는 크기가 0보다 큰 경우에만 % chkfile %의 stderr을 표시합니다.

note3 :이 스크립트를 freedisk.cmd로 저장했습니다 (사용법 참조).


1

스크립트에서 이것을 생성하기 위해 변형을 만듭니다.

volume C: - 49 GB total space / 29512314880 byte(s) free

이 정보를 얻기 위해 diskpart 를 사용 합니다.

@echo off
setlocal enableextensions enabledelayedexpansion
set chkfile=drivechk.tmp
if "%1" == "" goto :usage
set drive=%1
set drive=%drive:\=%
set drive=%drive::=%
dir %drive%:>nul 2>%chkfile%
for %%? in (%chkfile%) do (
  set chksize=%%~z?
)
if %chksize% neq 0 (
  more %chkfile%
  del %chkfile%
  goto :eof
)
del %chkfile%
echo list volume | diskpart | find /I " %drive% " >%chkfile%
for /f "tokens=6" %%a in ('type %chkfile%' ) do (
    set dsksz=%%a
)
for /f "tokens=7" %%a in ('type %chkfile%' ) do (
    set dskunit=%%a
)
del %chkfile%
for /f "tokens=3" %%a in ('dir %drive%:\') do (
  set bytesfree=%%a
)
set bytesfree=%bytesfree:,=%
echo volume %drive%: - %dsksz% %dskunit% total space / %bytesfree% byte(s) free
endlocal

goto :eof
:usage
  echo.
  echo   usage: freedisk ^<driveletter^> (eg.: freedisk c)

0

cscript는 타사 앱인가요? 프로그래밍 언어 (JScript, VBS)를 사용하여 List Available Disk Space 와 같은 항목을 확인할 수있는 Microsoft Scripting 을 사용하는 것이 좋습니다 .

스크립팅 인프라는 모든 최신 Windows 버전 (2008 포함)에 있습니다.


1
cscript 이다 마이크로 소프트 스크립팅. Windows 스크립팅 인터프리터 ( wscriptGUI 버전) 의 콘솔 버전입니다 .
Synetech 2014

"타사 설치"는 "추가 소프트웨어 설치"를 의미한다고 가정해야합니다. 제공하거나 설치할 필요가없는 실용적인 측면. 온보드 수단만을 의미합니다.
Alexander Stohr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.