Свободное место в оболочке CMD - PullRequest
85 голосов
/ 16 ноября 2008

Есть ли способ получить объем свободного дискового пространства диска или папки в CMD без необходимости установки сторонних приложений?

У меня есть CMD, которая копирует большой файл в заданный каталог и может, конечно, использовать возврат уровня ошибки из команды копирования, но тогда мне придется ждать времени требуется скопировать файл (например ... туда, где диск переполнен и операция копирования не выполнена).

Я хотел бы знать, прежде чем начать копирование, если это вообще идея. Пробовал утилиту DU.EXE от Sysinternals, но она показывает только занятое пространство.

Ответы [ 9 ]

103 голосов
/ 16 ноября 2008

Если вы запустите "dir c:\", последняя строка даст вам свободное место на диске.

Edit: Лучшее решение: "fsutil volume diskfree c:"

44 голосов
/ 16 ноября 2008

Возможное решение:

dir|find "bytes free"

более расширенное решение , для Windows Xp и более поздних версий:

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

Средство командной строки инструментария управления Windows 1010 * (WMIC) (Wmic.exe) может собрать огромное количество информации о Windows Server 2003, а также о Windows XP или Vista. Инструмент получает доступ к базовому оборудованию с помощью инструментария управления Windows (WMI). Не для Windows 2000.

6 голосов
/ 07 июня 2013

Вы можете избежать запятых, используя / -C в команде DIR.

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

Если вы хотите сравнить доступное пространство с необходимым, вы можете сделать что-то вроде следующего. Я указал число с разделителем тысяч, затем удалил их. Трудно понять номер без запятых. SET / A хорош, но он перестает работать с большими числами.

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%
5 голосов
/ 05 сентября 2011

Следующий скрипт даст вам свободные байты на диске:

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

Обратите внимание, что это зависит от вывода вашей команды dir, которой требуется последняя строка, содержащая свободное место в формате 24 Dir(s) 34,071,691,264 bytes free. В частности:

  • это должна быть последняя строка (или вы можете изменить цикл for, чтобы явно определять строку, а не полагаться на установку bytesfree для каждой строки).
  • свободное место должно быть третьим «словом» (или вы можете изменить бит tokens=, чтобы получить другое слово).
  • разделители тысяч - это , символ (или вы можете изменить подстановку с запятой на что-то еще).

Он не загрязняет пространство имен вашей среды, устанавливая только переменную bytesfree при выходе. Если ваш dir вывод отличается (например, разные языковые или языковые настройки), вам нужно будет настроить скрипт.

4 голосов
/ 02 февраля 2019

С помощью этой команды вы можете найти все разделы, размер и свободное пространство: wmic logicaldisk get size, freespace, caption

4 голосов
/ 16 ноября 2008

df.exe

Показывает все ваши диски; общая, используемая и свободная емкость. Вы можете изменить вывод с помощью различных параметров командной строки.

Вы можете получить его из http://www.paulsadowski.com/WSH/cmdprogs.htm, http://unxutils.sourceforge.net/ или из другого места. Это стандартный Unix-утилита, как du.

df -h покажет все используемое и доступное дисковое пространство вашего диска. Например:

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 доступен бесплатно с: https://www.cygwin.com/ Он добавляет много мощных инструментов в командную строку. Чтобы получить только доступное пространство на диске M (как в Windows отображается на общем диске), введите:

M:\>df -h | grep M: | awk '{print $4}'
1 голос
/ 03 февраля 2012

Использование paxdiablo отличное решение Я написал немного более сложный пакетный скрипт, который использует букву диска в качестве входящего аргумента и проверяет, существует ли диск хитрым (но не красивым) способом:

@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: вы можете ввести простую букву (например, x) или использовать x: или x: \ format в качестве буквы диска в аргументе

note2: скрипт будет отображать stderr из% chkfile%, только если его размер больше 0

note3: я сохранил этот скрипт как freedisk.cmd (см. Использование)

0 голосов
/ 14 февраля 2019

В Windows 10 операции копирования и копирования не выполняются немедленно, если копируется файл, который слишком велик для целевого каталога. Поэтому больше не требуется проверять доступное свободное место на диске перед началом операции копирования.

0 голосов
/ 16 ноября 2008

Является ли cscript сторонним приложением? Я предлагаю попробовать Microsoft Scripting , где вы можете использовать язык программирования (JScript, VBS) для проверки таких вещей, как Список доступного дискового пространства .

Инфраструктура сценариев присутствует во всех текущих версиях Windows (включая 2008).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...