webentwicklung-frage-antwort-db.com.de

Freier Speicherplatz in einer CMD-Shell

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

Ich habe eine CMD, die eine große Datei in ein bestimmtes Verzeichnis kopiert und natürlich den Fehlerlevel-Rücksprung aus dem Kopierbefehl verwenden kann. Dann muss ich jedoch die Zeit abwarten. Dann ist die Festplatte voll und der Kopiervorgang schlägt fehl.

Ich würde gerne wissen, ob ich überhaupt eine Idee habe, bevor ich mit der Kopie beginne. Versuchte das DU.EXE-Dienstprogramm von Sysinternals, aber das zeigt nur belegten Speicherplatz.

81
Peter Lundkvist

Wenn Sie "dir c:\" ausführen, erhalten Sie in der letzten Zeile den freien Speicherplatz.

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

99
Nico

Eine mögliche Lösung:

dir|find "bytes free"

eine " erweiterte Lösung " für Windows XP und mehr:

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

Mit dem Befehlszeilenprogramm Windows Management Instrumentation (WMIC) (Wmic.exe) Können umfangreiche Informationen zu Windows Server 2003 sowie Windows XP oder Vista gesammelt werden. Das Tool greift mithilfe der Windows Management Instrumentation (WMI) auf die zugrunde liegende Hardware zu. Nicht für Windows 2000.

44
VonC

Sie können die Kommas vermeiden, indem Sie im DIR-Befehl/-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 dann entfernt. Es ist schwierig, die Zahl ohne Kommas zu erfassen. Das SET/A ist Nizza, aber es funktioniert nicht mehr mit großen Nummern.

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
lit

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 dir-Befehls abhängt, der die letzte Zeile benötigt, die den freien Speicherplatz des Formats 24 Dir(s) 34,071,691,264 bytes free enthält. Speziell:

  • es muss sich um die letzte Zeile handeln (oder Sie können die for-Schleife so ändern, dass die Zeile explizit erkannt wird, anstatt sich auf die Einstellung von bytesfree für jede Zeile zu verlassen).
  • der freie Speicherplatz muss das dritte "Word" sein (oder Sie können das tokens=-Bit ändern, um ein anderes Word zu erhalten).
  • tausendertrennzeichen sind das ,-Zeichen (oder Sie können die Ersetzung von Komma in etwas anderes ändern).

Es verschmutzt nicht den Umgebungsraum Ihrer Umgebung, sondern legt beim Beenden nur die Variable bytesfree fest. Wenn Ihre dir-Ausgabe unterschiedlich ist (z. B. andere Ländereinstellungen oder Spracheinstellungen), müssen Sie das Skript anpassen.

5
paxdiablo

df.exe

Zeigt alle Ihre Festplatten an; Gesamt-, belegte und freie Kapazität. Sie können die Ausgabe durch verschiedene Befehlszeilenoptionen ändern.

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

df -h zeigt den gesamten und den verfügbaren Speicherplatz Ihres Laufwerks an. Zum Beispiel:

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/ .__ und fügt dem Befehl Prompt viele leistungsstarke Tools hinzu. Um nur den verfügbaren Speicherplatz auf Laufwerk M (wie in Windows einem gemeinsam genutzten Laufwerk zugeordnet) zu erhalten, können Sie Folgendes eingeben:

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

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

1
Dewsri De Mel

Mit paxdiablo excellent Lösung habe ich ein etwas komplexeres Batch-Skript geschrieben, das Laufwerksbuchstaben als eingehendes Argument verwendet und prüft, ob ein Laufwerk auf eine schwierige (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 eingeben (z. B. x) oder das Argument x: oder x:\als Laufwerksbuchstaben verwenden

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

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

0
Zsolt Hidasi

Ist cscript eine App eines Drittanbieters? Ich empfehle, Microsoft Scripting zu verwenden, wo Sie eine Programmiersprache (JScript, VBS) verwenden können, um beispielsweise auf List Available Disk Space zu überprüfen.

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

0
gimel

Unter Windows 10 schlagen die Kopier- und Xcopy-Vorgänge sofort fehl, falls eine Datei kopiert wird, die für das Zielverzeichnis zu groß ist. Es ist daher nicht mehr erforderlich, den verfügbaren freien Speicherplatz zu prüfen, bevor der Kopiervorgang gestartet wird.

0