Dung lượng trống trong trình bao CMD


95

Có cách nào để lấy dung lượng ổ đĩa trống của đĩa hoặc thư mục trong CMD mà không cần phải cài đặt một số ứng dụng của bên thứ ba không?

Tôi có một CMD sao chép một tệp lớn vào một thư mục nhất định và tất nhiên có thể sử dụng trả về mức lỗi từ lệnh sao chép, nhưng sau đó tôi phải đợi thời gian cần thiết để sao chép tệp (ví dụ: ... vào đó thì đĩa đầy và thao tác sao chép không thành công).

Tôi muốn biết trước khi bắt đầu sao chép nếu đó là bất kỳ ý tưởng nào. Đã thử tiện ích DU.EXE từ Sysinternals, nhưng nó chỉ hiển thị không gian bị chiếm dụng.


tôi phải giả định rằng "cài đặt của bên thứ ba" có nghĩa là "bất kỳ cài đặt phần mềm bổ sung nào". rằng khía cạnh thực tế của việc không cần cung cấp hoặc cài đặt bất cứ thứ gì. chỉ có trên tàu có nghĩa là.
Alexander Stohr

Câu trả lời:


112

Nếu bạn chạy " dir c:\", dòng cuối cùng sẽ cung cấp cho bạn dung lượng đĩa trống.

Chỉnh sửa: Giải pháp tốt hơn: " fsutil volume diskfree c:"


1
Và nó cũng hoạt động với các điểm gắn kết, điều này không xảy ra với dir!
LogicDaemon

2
Dir hoạt động tốt, nhưng lưu ý rằng bạn sẽ phải tạo một tệp giả nếu ổ đĩa của bạn trống. Mặt khác, nó không cung cấp cho ổ đĩa trống (<3 Ms :)
Balmipour

có cách nào để chỉ lấy số byte miễn phí không?
Mina Jacob

Ngoài ra, ngoại trừ dir gốc, dir ..*(hoặc dir c:\thing\..*) sẽ hiển thị một danh sách rất ngắn, cho dù có hoặc không có hoặc nhiều tệp trong thư mục.
azhrei

fsutil way có thể không hoạt động đối với các ổ đĩa ảo như IMDisk RAM Drive. Bạn sẽ nhận được: Lỗi: Chức năng không chính xác. Tiện ích FSUTIL yêu cầu khối lượng NTFS cục bộ.
user2846246

51

Một giải pháp khả thi:

dir|find "bytes free"

một " giải pháp nâng cao " hơn, dành cho Windows Xp và hơn thế nữa:

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

Công cụ dòng lệnh quản lý công cụ quản lý Windows (WMIC) (Wmic.exe) có thể thu thập lượng lớn thông tin về Windows Server 2003 cũng như Windows XP hoặc Vista. Công cụ này truy cập phần cứng bên dưới bằng cách sử dụng Công cụ quản lý Windows (WMI). Không dành cho Windows 2000.


Theo ghi nhận của Alexander Stohr trong các bình luận :

  • WMIC cũng có thể thấy các hạn chế dựa trên chính sách. (ngay cả khi ' dir' vẫn thực hiện công việc),
  • ' dir' phụ thuộc vào ngôn ngữ.

5
+1 cho WMI. Nên là giải pháp ổn định duy nhất. Dựa trên một ngôn ngữ cụ thể (ví find) có lẽ là một ý tưởng tồi :)
Joey

Để đưa các không gian trống vào một biến có thể sử dụng những điều sau đây:@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
Davor Josipovic

3
@Pacerier: Tôi nghĩ rằng tôi nhớ fsutilcần có đặc quyền của Quản trị viên để chạy, bất kể bạn đang làm gì với nó.
Joey


1
@AlexanderStohr Điểm tốt. Tôi đã bao gồm bình luận của bạn trong câu trả lời để hiển thị nhiều hơn.
VonC

8

Sử dụng lệnh này, bạn có thể tìm thấy tất cả các phân vùng, kích thước và dung lượng trống: wmic logicaldisk get size, freespace, caption


7

Bạn có thể tránh dấu phẩy bằng cách sử dụng / -C trên lệnh DIR.

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

Nếu bạn muốn so sánh không gian có sẵn với không gian cần thiết, bạn có thể làm như sau. Tôi đã chỉ định số với dấu phân cách hàng nghìn, sau đó loại bỏ chúng. Rất khó để nắm bắt số mà không có dấu phẩy. SET / A rất hay, nhưng nó ngừng hoạt động với số lượng lớn.

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

Tập lệnh sau sẽ cung cấp cho bạn các byte miễn phí trên ổ đĩa:

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

Lưu ý rằng điều này phụ thuộc vào đầu ra của dirlệnh của bạn , lệnh này cần dòng cuối cùng chứa dung lượng trống của định dạng 24 Dir(s) 34,071,691,264 bytes free. Đặc biệt:

  • nó phải là dòng cuối cùng (hoặc bạn có thể sửa đổi forvòng lặp để phát hiện dòng một cách rõ ràng thay vì dựa vào cài đặt bytesfreecho mọi dòng).
  • không gian trống phải là "từ" thứ ba (hoặc bạn có thể thay đổi một tokens=chút để có được một từ khác).
  • hàng nghìn dấu phân cách là ,ký tự (hoặc bạn có thể thay thế từ dấu phẩy sang một ký tự khác).

Nó không làm ô nhiễm không gian tên môi trường của bạn, chỉ đặt bytesfreebiến khi thoát. Nếu dirđầu ra của bạn khác (ví dụ: cài đặt ngôn ngữ hoặc địa phương khác nhau), bạn sẽ cần điều chỉnh tập lệnh.


6

df.exe

Hiển thị tất cả các đĩa của bạn; tổng dung lượng đã sử dụng và còn trống. Bạn có thể thay đổi đầu ra bằng các tùy chọn dòng lệnh khác nhau.

Bạn có thể lấy nó từ http://www.paulsadowski.com/WSH/cmdprogs.htm , http://unxutils.sourceforge.net/ hoặc một nơi nào khác. Đó là một công cụ unix tiêu chuẩn như du.

df -hsẽ hiển thị tất cả dung lượng ổ đĩa đã sử dụng và còn trống của ổ đĩa của bạn. Ví dụ:

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 được cung cấp miễn phí tại: https://www.cygwin.com/ Nó bổ sung nhiều công cụ mạnh mẽ cho dấu nhắc lệnh. Để chỉ có được không gian có sẵn trên ổ M (như được ánh xạ trong cửa sổ vào ổ đĩa dùng chung), người ta có thể nhập:

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

2
bạn có biết tại sao bạn đã bị lạm dụng không? Bởi vì bạn không đọc kỹ câu hỏi. Đọc: «mà không cần phải cài đặt một số ứng dụng của bên thứ ba». Mặc dù cá nhân tôi thích unxutils, nhưng nó không phải là câu trả lời ở đây.
LogicDaemon

7
Đó vẫn là một câu trả lời chất lượng tốt cho những người đến đây ngoài OP
Peter

1

Sử dụng giải pháp xuất sắc của paxdiablo, tôi đã viết một tập lệnh lô phức tạp hơn một chút, sử dụng ký tự ổ đĩa làm đối số đến và kiểm tra xem ổ đĩa có tồn tại theo một cách khó (nhưng không đẹp) hay không:

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

note1: bạn có thể nhập ký tự đơn giản (ví dụ: x) hoặc có thể sử dụng định dạng x: hoặc x: \ làm ký tự ổ đĩa trong đối số

note2: script sẽ chỉ hiển thị stderr từ% chkfile% nếu kích thước lớn hơn 0

note3: Tôi đã lưu tập lệnh này dưới dạng freedisk.cmd (xem cách sử dụng)


1

Tôi tạo một biến thể để tạo điều này từ script:

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

Tôi sử dụng diskpart để lấy thông tin này.

@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 có phải là ứng dụng của bên thứ 3 không? Tôi khuyên bạn nên thử Microsoft Scripting , nơi bạn có thể sử dụng một ngôn ngữ lập trình (JScript, VBS) để kiểm tra những thứ như Danh sách Dung lượng Đĩa Có sẵn .

Cơ sở hạ tầng tập lệnh có mặt trên tất cả các phiên bản Windows hiện tại (bao gồm cả năm 2008).


1
cscript Microsoft Scripting. Đây là phiên bản giao diện điều khiển của trình thông dịch kịch bản Windows ( wscriptlà phiên bản GUI).
Synetech

tôi phải giả định rằng "cài đặt của bên thứ ba" có nghĩa là "bất kỳ cài đặt phần mềm bổ sung nào". rằng khía cạnh thực tế của việc không cần cung cấp hoặc cài đặt bất cứ thứ gì. chỉ có trên tàu có nghĩa là.
Alexander Stohr
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.