Freier Speicherplatz in einer CMD-Shell


95

Gibt es eine Möglichkeit, den freien Speicherplatz einer Festplatte oder eines Ordners in einem CMD abzurufen, ohne Anwendungen von Drittanbietern installieren zu müssen?

Ich habe ein CMD, das eine große Datei in ein bestimmtes Verzeichnis kopiert und natürlich die Rückgabe der Fehlerstufe aus dem Kopierbefehl verwenden könnte, aber dann muss ich auf die Zeit warten, die zum Kopieren der Datei benötigt wird (z. B. ... dann die Die Festplatte ist voll und der Kopiervorgang schlägt fehl.

Ich würde gerne wissen, bevor ich mit dem Kopieren beginne, ob es überhaupt eine Idee ist. Versuchte das Dienstprogramm DU.EXE von Sysinternals, aber das zeigt nur belegten Speicherplatz.


Ich muss davon ausgehen, dass "Installation durch Dritte" eher "zusätzliche Softwareinstallation" bedeutet. dass der praktische Aspekt, weder etwas bereitstellen noch installieren zu müssen. nur an Bord bedeutet.
Alexander Stohr

Antworten:


112

Wenn du läufst "dir c:\ " , erhalten Sie in der letzten Zeile den freien Speicherplatz.

Edit: Bessere Lösung: " fsutil volume diskfree c:"


1
Und es funktioniert auch mit Mountpoints, was bei dir nicht der Fall ist!
LogicDaemon

2
Dir funktioniert gut, aber beachten Sie, dass Sie eine Dummy-Datei erstellen müssen, wenn Ihr Laufwerk leer ist.
Andernfalls

Gibt es eine Möglichkeit, nur die Anzahl der freien Bytes zu ermitteln?
Mina Jacob

Mit Ausnahme des Stammverzeichnisses zeigt dir ..*(oder dir c:\thing\..*) eine sehr kurze Liste an, unabhängig davon, ob sich null oder viele Dateien im Verzeichnis befinden oder nicht.
Azhrei

fsutil way funktioniert möglicherweise nicht für virtuelle Laufwerke wie IMDisk RAM Drive. Sie erhalten: Fehler: Falsche Funktion. Das Dienstprogramm FSUTIL erfordert ein lokales NTFS-Volume.
user2846246

51

Eine mögliche Lösung:

dir|find "bytes free"

eine " fortschrittlichere Lösung " für Windows XP und darüber hinaus:

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

Das WMIC-Tool ( Windows Management Instrumentation Command Line ) (Wmic.exe) kann umfangreiche Informationen zu Windows Server 2003 sowie Windows XP oder Vista erfassen. Das Tool greift mithilfe der Windows Management Instrumentation (WMI) auf die zugrunde liegende Hardware zu. Nicht für Windows 2000.


Wie von Alexander Stohr in den Kommentaren bemerkt :

  • WMIC kann auch richtlinienbasierte Einschränkungen sehen. (auch wenn ' dir' den Job noch machen wird),
  • ' dir' ist vom Gebietsschema abhängig.

5
+1 für WMI. Sollte die einzige stabile Lösung sein. Sich auf eine bestimmte Sprache (zum Finden) zu verlassen, ist wahrscheinlich eine schlechte Idee :)
Joey

Um den freien Speicherplatz in eine Variable zu setzen, könnte man Folgendes verwenden:@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: Ich denke, ich erinnere mich, dass ich fsutilAdministratorrechte benötigt habe, um überhaupt ausgeführt zu werden, unabhängig davon, was Sie damit machen.
Joey


1
@ AlexanderStohr Gute Punkte. Ich habe Ihren Kommentar zur besseren Sichtbarkeit in die Antwort aufgenommen.
VonC

8

Mit diesem Befehl können Sie alle Partitionen, Größe und freien Speicherplatz finden: wmic logicaldisk get size, freespace, caption


7

Sie können die Kommas vermeiden, indem Sie im Befehl DIR / -C verwenden.

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

Wenn Sie den verfügbaren Speicherplatz mit dem benötigten Speicherplatz vergleichen möchten, können Sie Folgendes tun. Ich habe die Zahl mit Tausendertrennzeichen angegeben und sie dann entfernt. Es ist schwierig, die Zahl ohne Komma zu erfassen. Das SET / A ist nett, aber es funktioniert nicht mehr mit großen Zahlen.

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

Das folgende Skript gibt Ihnen freie Bytes auf dem Laufwerk:

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

Beachten Sie, dass dies von der Ausgabe Ihres dirBefehls abhängt, für den die letzte Zeile den freien Speicherplatz des Formats benötigt 24 Dir(s) 34,071,691,264 bytes free. Speziell:

  • Es muss die letzte Zeile sein (oder Sie können die ändern for Schleife , um die Zeile explizit zu erkennen, anstatt sich auf die Einstellung zu verlassenbytesfree für jede Zeile zu verlassen).
  • Der freie Speicherplatz muss das dritte "Wort" sein (oder Sie können das ändern tokens= Bit , um ein anderes Wort zu erhalten).
  • Tausende Trennzeichen sind das ,Zeichen (oder Sie können die Ersetzung von Komma in etwas anderes ändern).

Der Umgebungsnamespace wird nicht verschmutzt, sondern nur die bytesfreeVariable beim Beenden festgelegt. Wenn Ihre dirAusgabe unterschiedlich ist (z. B. unterschiedliche Gebietsschema- oder Spracheinstellungen), müssen Sie das Skript anpassen.


6

df.exe

Zeigt alle Ihre Festplatten an; Gesamtkapazität und freie Kapazität. Sie können die Ausgabe über verschiedene Befehlszeilenoptionen ändern.

Sie können es von http://www.paulsadowski.com/WSH/cmdprogs.htm , http://unxutils.sourceforge.net/ oder woanders erhalten. Es ist ein Standard-Unix-Util wie du.

df -hzeigt den gesamten verwendeten und verfügbaren Speicherplatz Ihres Laufwerks an. Beispielsweise:

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 ist kostenlos erhältlich unter: https://www.cygwin.com/ Es fügt der Eingabeaufforderung viele leistungsstarke Tools hinzu. Um nur den verfügbaren Speicherplatz auf Laufwerk M zu erhalten (wie in Windows einem freigegebenen Laufwerk zugeordnet), können Sie Folgendes eingeben:

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

2
Weißt du, warum du missbraucht wurdest? Weil Sie die Frage nicht sorgfältig lesen. Lesen Sie: «ohne dass Sie Anwendungen von Drittanbietern installieren müssen». Obwohl ich persönlich Unxutils mag, ist es hier keine Antwort.
LogicDaemon

7
Es ist immer noch eine gute Antwort für diejenigen, die hierher kommen, außer dem OP
Peter

1

Mit der exzellenten Lösung von paxdiablo habe ich ein etwas ausgefeilteres Batch-Skript geschrieben, das den Laufwerksbuchstaben als eingehendes Argument verwendet und prüft, ob das Laufwerk auf knifflige (aber nicht schöne) Weise vorhanden ist:

@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: Sie können einen einfachen Buchstaben (z. B. x) eingeben oder das Format x: oder x: \ als Laufwerksbuchstaben im Argument verwenden

note2: Das Skript zeigt stderr von% chkfile% nur an, wenn die Größe größer als 0 ist

note3: Ich habe dieses Skript als freedisk.cmd gespeichert (siehe Verwendung)


1

Ich mache eine Variation, um dies aus dem Skript zu generieren:

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

Ich benutze diskpart , um diese Informationen zu erhalten.

@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

Ist cscript eine Drittanbieter-App? Ich empfehle Microsoft Scripting , bei dem Sie eine Programmiersprache (JScript, VBS) verwenden können, um beispielsweise den verfügbaren Speicherplatz aufzulisten .

Die Skriptinfrastruktur ist in allen aktuellen Windows-Versionen (einschließlich 2008) vorhanden.


1
cscript ist Microsoft Scripting. Dies ist die Konsolenversion des Windows-Skriptinterpreters ( wscriptist die GUI-Version).
Synetech

Ich muss davon ausgehen, dass "Installation durch Dritte" eher "zusätzliche Softwareinstallation" bedeutet. dass der praktische Aspekt, weder etwas bereitstellen noch installieren zu müssen. nur an Bord bedeutet.
Alexander Stohr
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.