Ruang kosong di shell CMD

95

Adakah cara untuk mendapatkan jumlah ruang disk kosong dari disk atau folder di CMD tanpa harus menginstal beberapa aplikasi pihak ketiga?

Saya memiliki CMD yang menyalin file besar ke direktori tertentu dan tentu saja dapat menggunakan tingkat kesalahan kembali dari perintah salin, tetapi kemudian saya harus menunggu waktu yang diperlukan untuk menyalin file (misalnya ... untuk itu lalu disk penuh dan operasi penyalinan gagal).

Saya ingin tahu sebelum saya mulai menyalin apakah ada ide sama sekali. Mencoba utilitas DU.EXE dari Sysinternals, tetapi acara itu hanya menempati ruang.

Ned Batchelder
sumber
saya harus menganggap "pemasangan pihak ketiga" berarti "pemasangan perangkat lunak tambahan". bahwa aspek praktis tidak perlu menyediakan atau menginstal apa pun. hanya sarana on-board.
Alexander Stohr

Jawaban:

114

Jika Anda menjalankan " dir c:\", baris terakhir akan memberi Anda ruang disk kosong.

Edit: Solusi yang lebih baik: " fsutil volume diskfree c:"

Nico
sumber
1
Dan itu juga bekerja dengan mountpoint, yang tidak case dengan dir!
LogicDaemon
2
Dir berfungsi dengan baik, tetapi perhatikan bahwa Anda harus membuat file tiruan jika drive Anda kosong. Selain itu, ini tidak memberikan ruang kosong pada drive (<3 Ms :)
Balmipour
apakah ada cara untuk mendapatkan jumlah byte gratis saja?
Mina Jacob
Selain itu, kecuali untuk root dir, dir ..*(atau dir c:\thing\..*) akan menampilkan daftar yang sangat singkat, apakah ada nol atau banyak file di direktori atau tidak.
azhrei
cara fsutil mungkin tidak berfungsi untuk drive virtual seperti IMDisk RAM Drive. Anda akan mendapatkan: Error: Salah fungsi. Utilitas FSUTIL memerlukan volume NTFS lokal.
pengguna2846246
51

Solusi yang mungkin:

dir|find "bytes free"

solusi yang lebih canggih , untuk Windows Xp dan yang lebih baru:

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

Alat Windows Management Instrumentation Command-line (WMIC) (Wmic.exe) dapat mengumpulkan banyak informasi tentang Windows Server 2003 serta Windows XP atau Vista. Alat mengakses perangkat keras yang mendasari dengan menggunakan Windows Management Instrumentation (WMI). Bukan untuk Windows 2000.


Seperti dicatat oleh Alexander Stohr di komentar :

  • WMIC juga dapat melihat pembatasan berbasis kebijakan. (bahkan jika ' dir' masih akan melakukan pekerjaan itu),
  • ' dir' bergantung pada lokal.
VonC
sumber
5
1 untuk WMI. Harus menjadi satu-satunya solusi yang stabil. Mengandalkan bahasa tertentu (untuk menemukan) mungkin ide yang buruk :)
Joey
Untuk menempatkan ruang kosong menjadi variabel, seseorang dapat menggunakan yang berikut:@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: Saya pikir saya ingat saya fsutilmembutuhkan hak istimewa Administrator untuk menjalankannya, terlepas dari apa yang Anda lakukan dengannya.
Joey
1
@AlexanderStt. Poin bagus. Saya telah memasukkan komentar Anda dalam jawaban untuk visibilitas lebih lanjut.
VonC
8

Dengan menggunakan perintah ini Anda dapat menemukan semua partisi, ukuran & ruang kosong: wmic logicaldisk get size, freespace, caption

Dewsri De Mel
sumber
7

Anda dapat menghindari koma dengan menggunakan / -C pada perintah DIR.

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

Jika Anda ingin membandingkan ruang yang tersedia dengan ruang yang dibutuhkan, Anda dapat melakukan hal seperti berikut ini. Saya menentukan nomor dengan pemisah ribuan, lalu menghapusnya. Sulit untuk memahami nomor tanpa koma. SET / A bagus, tapi berhenti bekerja dengan jumlah yang besar.

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%
menyala
sumber
6

Skrip berikut akan memberi Anda byte gratis pada drive:

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

Perhatikan bahwa ini tergantung pada output dari dirperintah Anda , yang membutuhkan baris terakhir yang berisi ruang kosong format 24 Dir(s) 34,071,691,264 bytes free. Secara khusus:

  • itu harus menjadi baris terakhir (atau Anda dapat memodifikasi forloop untuk mendeteksi baris secara eksplisit daripada mengandalkan pengaturan bytesfreeuntuk setiap baris).
  • ruang kosong harus berupa "kata" ketiga (atau Anda dapat mengubah tokens=sedikit untuk mendapatkan kata lain).
  • ribuan pemisah adalah ,karakter (atau Anda dapat mengubah substitusi dari koma ke yang lain).

Itu tidak mencemari namespace lingkungan Anda, hanya menyetel bytesfreevariabel saat keluar. Jika dirkeluaran Anda berbeda (misalnya, pengaturan lokal atau bahasa yang berbeda), Anda perlu menyesuaikan skrip.

paxdiablo
sumber
6

df.exe

Menampilkan semua disk Anda; kapasitas total, terpakai dan gratis. Anda dapat mengubah output dengan berbagai opsi baris perintah.

Anda bisa mendapatkannya dari http://www.paulsadowski.com/WSH/cmdprogs.htm , http://unxutils.sourceforge.net/ atau di tempat lain. Ini adalah unix-util standar seperti du.

df -hakan menampilkan semua ruang disk yang digunakan dan tersedia di drive Anda. Sebagai contoh:

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 tersedia gratis dari: https://www.cygwin.com/ Ia menambahkan banyak alat canggih ke command prompt. Untuk mendapatkan hanya ruang yang tersedia di drive M (seperti yang dipetakan di windows ke drive bersama), seseorang dapat masuk:

M:\>df -h | grep M: | awk '{print $4}'
tommym
sumber
2
apakah Anda tahu mengapa Anda dilecehkan? Karena Anda tidak membaca pertanyaan dengan cermat. Baca: «tanpa harus menginstal beberapa aplikasi pihak ketiga». Meskipun saya pribadi suka unxutils, itu tidak menjawab di sini.
LogicDaemon
7
Ini masih merupakan jawaban berkualitas yang layak bagi mereka yang datang ke sini selain OP
Peter
1

Dengan menggunakan solusi paxdiablo yang sangat baik, saya menulis skrip batch yang sedikit lebih canggih, yang menggunakan huruf drive sebagai argumen masuk dan memeriksa apakah drive ada dengan cara yang rumit (tetapi tidak cantik):

@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: Anda dapat mengetik huruf sederhana (misalnya x) atau dapat menggunakan format x: atau x: \ sebagai huruf drive dalam argumen

note2: script akan menampilkan stderr dari% chkfile% hanya jika ukurannya lebih besar dari 0

note3: Saya menyimpan skrip ini sebagai freedisk.cmd (lihat penggunaan)

Zsolt Hidasi
sumber
1

Saya membuat variasi untuk menghasilkan ini dari skrip:

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

Saya menggunakan diskpart untuk mendapatkan informasi ini.

@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)
Pedro Robson Leão
sumber
0

Apakah cscript adalah aplikasi pihak ketiga? Saya sarankan mencoba Microsoft Scripting , di mana Anda dapat menggunakan bahasa pemrograman (JScript, VBS) untuk memeriksa hal-hal seperti Daftar Ruang Disk yang Tersedia .

Infrastruktur skrip ada di semua versi Windows saat ini (termasuk 2008).

gimel
sumber
1
cscript adalah Microsoft Scripting. Ini adalah versi konsol dari penerjemah skrip Windows ( wscriptadalah versi GUI).
Synetech
saya harus menganggap "pemasangan pihak ketiga" berarti "pemasangan perangkat lunak tambahan". bahwa aspek praktis tidak perlu menyediakan atau menginstal apa pun. hanya sarana on-board.
Alexander Stohr