CMD kabuğundaki boş alan


97

Bazı üçüncü taraf uygulamaları yüklemeye gerek kalmadan bir CMD'deki bir diskin veya bir klasörün boş disk alanı miktarını almanın bir yolu var mı?

Büyük bir dosyayı belirli bir dizine kopyalayan ve elbette kopyalama komutundan hata düzeyi dönüşünü kullanabilen bir CMD'ye sahibim, ancak daha sonra dosyayı kopyalamak için gereken süreyi beklemem gerekiyor (örneğin ... disk dolu ve kopyalama işlemi başarısız oluyor).

Kopyalamaya başlamadan önce herhangi bir fikir olup olmadığını bilmek isterim. Sysinternals'dan DU.EXE yardımcı programını denedim, ancak bu gösteri yalnızca yer kapladı.


"üçüncü taraf yüklemesi" nin "herhangi bir ekstra yazılım yüklemesi" anlamına geldiğini varsaymalıyım. ne bir şey sağlamaya ne de kurmaya ihtiyaç duymamanın pratik yönü. sadece yerleşik araçlar.
Alexander Stohr

Yanıtlar:


116

Eğer " dir c:\" çalıştırırsanız , son satır size boş disk alanını verecektir.

Düzenleme: Daha iyi çözüm: " fsutil volume diskfree c:"


1
Ayrıca mountpoints ile de çalışır, ki bu dir ile durum böyle değildir!
LogicDaemon

2
Dir iyi çalışıyor, ancak sürücünüz boşsa sahte bir dosya oluşturmanız gerekeceğini unutmayın. Aksi takdirde, sürücüye boş alan vermez (<3 Ms :)
Balmipour

sadece ücretsiz bayt sayısını almanın bir yolu var mı?
Mina Jacob

Ayrıca, kök dizin haricinde, dir ..*(veya dir c:\thing\..*) dizinde sıfır veya çok sayıda dosya olup olmadığına bakılmaksızın çok kısa bir liste gösterecektir.
azhrei

fsutil yolu, IMDisk RAM Sürücüsü gibi sanal sürücüler için çalışmayabilir. Şunları alacaksınız: Hata: Yanlış işlev. FSUTIL yardımcı programı, yerel bir NTFS birimi gerektirir.
user2846246

51

Olası bir çözüm:

dir|find "bytes free"

Windows Xp ve ötesi için daha " gelişmiş bir çözüm ":

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

Windows Yönetim Araçları Komut satırı (WMIC) aracı (WMIC.exe) Windows Server 2003 hem de Windows XP veya Vista hakkında hakkında bilgi büyük miktarlarda toplayabilir. Araç, Windows Yönetim Araçları'nı (WMI) kullanarak temeldeki donanıma erişir. Windows 2000 için değil.


Alexander Stohr'un yorumlarda belirttiği gibi :

  • WMIC, politika tabanlı kısıtlamaları da görebilir. (' dir' işi yine de yapacak olsa bile ),
  • ' dir' yerel ayara bağlıdır.

5
WMI için +1. Tek kararlı çözüm olmalı. Belirli bir dile güvenmek (bulmak için) muhtemelen kötü bir fikirdir :)
Joey

Boş alanı bir değişkene koymak için aşağıdakiler kullanılabilir:@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: Bununla fsutilne yaparsanız yapın, çalıştırmak için Yönetici ayrıcalıklarına ihtiyacım olduğunu hatırlıyorum .
Joey


1
@AlexanderStohr İyi puanlar. Daha fazla görünürlük için yorumunuzu cevaba ekledim.
VonC

9

Bu komutu kullanarak tüm bölümleri, boyutu ve boş alanı bulabilirsiniz: wmic logicaldisk get size, freespace, caption


7

DIR komutunda / -C kullanarak virgüllerden kaçınabilirsiniz.

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

Mevcut alanı gereken alanla karşılaştırmak isterseniz, aşağıdaki gibi bir şey yapabilirsiniz. Sayıyı binlik ayırıcıyla belirledim, sonra kaldırdım. Sayıyı virgül olmadan anlamak zordur. SET / A güzel, ancak büyük sayılarla çalışmayı bırakıyor.

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

Aşağıdaki komut dosyası size sürücüde ücretsiz bayt verecektir:

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

Bunun dir, biçimin boş alanını içeren son satıra ihtiyaç duyan komutunuzun çıktısına bağlı olduğunu unutmayın 24 Dir(s) 34,071,691,264 bytes free. Özellikle:

  • son satır olmalıdır (veya her satırın forayarına güvenmek yerine hattı açıkça algılayacak şekilde döngüyü değiştirebilirsiniz bytesfree).
  • boş alan üçüncü "kelime" olmalıdır (veya tokens=farklı bir kelime elde etmek için biti değiştirebilirsiniz ).
  • Binlik ayırıcılar ,karakterdir (veya ikameyi virgülden başka bir şeye değiştirebilirsiniz).

bytesfreeÇıkışta yalnızca değişkeni ayarlayarak ortam ad alanını kirletmez . Senin Eğer dirçıkış farklı (örneğin, farklı yerel veya dil ayarları), sen senaryoyu ayarlamak gerekir.


6

df.exe

Tüm disklerinizi gösterir; toplam, kullanılmış ve boş kapasite. Çıkışı çeşitli komut satırı seçenekleriyle değiştirebilirsiniz.

Sen mal alabilirsiniz http://www.paulsadowski.com/WSH/cmdprogs.htm , http://unxutils.sourceforge.net/ ya da başka bir yere. Du gibi standart bir unix-kullanım.

df -hsürücünüzün kullanılan ve kullanılabilir tüm disk alanını gösterecektir. Örneğin:

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 şu adresten ücretsiz olarak edinilebilir: https://www.cygwin.com/ Komut istemine birçok güçlü araç ekler. Yalnızca M sürücüsündeki kullanılabilir alanı elde etmek için (pencerelerde bir ortak drive ile eşlendiği şekilde) aşağıdakilerden biri girilebilir:

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

2
neden suçlandığını biliyor musun? Çünkü soruyu dikkatli okumuyorsun. Okuyun: «bazı üçüncü taraf uygulamaları yüklemeye gerek kalmadan». Şahsen unxutils'i sevmeme rağmen, burada cevap değil.
LogicDaemon

7
OP dışında buraya gelenler için hala kaliteli bir cevap
Peter

1

Paxdiablo mükemmel çözümünü kullanarak , gelen argüman olarak sürücü harfini kullanan ve sürücünün zor (ama güzel değil) bir şekilde var olup olmadığını kontrol eden biraz daha karmaşık bir toplu komut dosyası yazdım:

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

not1: basit harf (örneğin x) yazabilir veya bağımsız değişkende sürücü harfi olarak x: veya x: \ formatını kullanabilirsiniz

note2: betik,% chkfile% öğesinden stderr'yi yalnızca boyut 0'dan büyükse gösterecektir

note3: Bu betiği freedisk.cmd olarak kaydettim (kullanıma bakın)


1

Bunu komut dosyasından oluşturmak için bir değişiklik yapıyorum:

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

Bu bilgiyi almak için diskpart kullanıyorum .

@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 bir 3. taraf uygulaması mı? Kullanılabilir Disk Alanını Listeleme gibi şeyleri kontrol etmek için bir programlama dili (JScript, VBS) kullanabileceğiniz Microsoft Komut Dosyası'nı denemenizi öneririm .

Komut dosyası altyapısı tüm güncel Windows sürümlerinde (2008 dahil) mevcuttur.


1
cscript olan Microsoft komut dosyası. Windows komut dosyası yorumlayıcısının konsol sürümüdür ( wscriptGUI sürümüdür).
Synetech

"üçüncü taraf yüklemesi" nin "herhangi bir ekstra yazılım yüklemesi" anlamına geldiğini varsaymalıyım. ne bir şey sağlamaya ne de kurmaya ihtiyaç duymamanın pratik yönü. sadece yerleşik araçlar.
Alexander Stohr
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.