bestsource

CMD 쉘의 사용 가능한 공간

bestsource 2023. 4. 19. 23:19
반응형

CMD 쉘의 사용 가능한 공간

일부 서드파티 애플리케이션을 설치하지 않고도 CMD에서 디스크 또는 폴더의 빈 디스크 공간을 확보할 수 있는 방법이 있습니까?

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

복사를 시작하기 전에 조금이라도 아이디어가 있는지 알고 싶습니다.Sysinternals에서 DU.EXE 유틸리티를 시험했지만 점유 영역만 표시.

'하면, '우리끼리'를 실행하면dir c:\빈 공간이 나옵니다.

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

생각할 수 있는 해결책:

dir|find "bytes free"

Windows Xp 이후를 위한 "고급 솔루션"

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

WMIC(Windows Management Instrumentation Command-Line) 도구(Wmic.exe)는 Windows Server 2003 및 Windows XP 또는 Vista에 대한 방대한 정보를 수집할 수 있습니다.이 도구는 WMI(Windows Management Instrumentation)를 사용하여 기본 하드웨어에 액세스합니다.Windows 2000 용은 아닙니다.


Alexander Stohr가 코멘트에서 언급한 바와 같이:

  • WMIC WMIC 、 WMIC 、 WMIC 、 WMIC 、 WMIC 、 WMIC 、 WMIC WMIC 、 WMIC w w w w w w w w w w w w w w w w w w w w w' w' w w이 w w w'''dir할 수 요', '할 수 있어요', '할 수 있어요', '할 수 있어요', '할 수 있어요', '할 수 있어요', '할 수 있어요', '할 수 있다' 이렇게 말합니다.
  • dir에 의존합니다는 로케일에 의존합니다.

및 가능한 공간을 수 .「 」 、 「 」 、 「 」wmic logicaldisk get size, freespace, caption

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%

갱신:

2014년 이후로 많은 것이 바뀌었다.여기 더 나은 답이 있다.현재 지원되는 모든 마이크로소프트 윈도우즈 시스템에서 사용할 수 있는 PowerShell을 사용합니다.

다음 코드는 cmd.exe를 래퍼로 사용하지 않고 PowerShell로 스크립트를 작성했다면 훨씬 명확하고 이해하기 쉬웠을 것입니다.Core를 PowerShell Core를 합니다.powershell로로 합니다.pwsh.

SET "NEEDED=100,000,000"
SET "NEEDED=%NEEDED:,=%"

powershell -NoLogo -NoProfile -Command ^
    $Free = (Get-PSDrive -Name 'C').Free; ^
    if ($Free -lt [int64]%NEEDED%) { exit $true } else { exit $false }
IF ERRORLEVEL 1 (
    ECHO "Not enough disk space available."
) else (
    ECHO "Available disk space is adequate."
)

df.exe

전체 용량, 사용된 용량 및 사용 가능한 용량을 모두 표시합니다.다양한 명령줄 옵션을 사용하여 출력을 변경할 수 있습니다.

http://www.paulsadowski.com/WSH/cmdprogs.htm, http://unxutils.sourceforge.net/ 또는 다른 곳에서 구할 수 있습니다.du와 같은 표준 Unix-util입니다.

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/ 명령 프롬프트에 많은 강력한 도구를 추가합니다.Windows에서 공유 드라이브에 매핑된 것처럼 드라이브 M에서 사용 가능한 공간만 확보하려면 다음을 입력합니다.

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

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

@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출력이 다릅니다(로케일 또는 언어 설정 등).스크립트를 조정해야 합니다.

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을 표시합니다.

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

스크립트로부터 이것을 생성하기 위해서 바리에이션 합니다.

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

이 정보를 얻기 위해 디스크 파트를 사용합니다.

@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)

cscript는 서드파티 앱입니까?Microsoft Script 를 사용해 보는 것을 추천합니다.이 경우, 프로그램 언어(JScript, VBS)를 사용해 사용 가능한 디스크 영역 일람등의 정보를 확인할 수 있습니다.

스크립팅 인프라스트럭처는 현재 모든 Windows 버전(2008년 포함)에 존재합니다.

언급URL : https://stackoverflow.com/questions/293780/free-space-in-a-cmd-shell

반응형