Свободное пространство в оболочке CMD

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

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

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

Ответ 1

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

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

Ответ 2

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

dir|find "bytes free"

более " расширенное решение" для Windows Xp и выше:

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

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

Ответ 3

Вы можете избежать запятых, используя /-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%

Ответ 4

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

@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 отличается (например, разные языковые настройки или языковые настройки), вам необходимо настроить script.

Ответ 5

df.exe

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

Вы можете получить его из http://www.paulsadowski.com/WSH/cmdprogs.htm, http://unxutils.sourceforge.net/ или в другом месте. Это стандартный unix-util, такой как 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 (отображаемое в окнах на общий диск), можно ввести:

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

Ответ 6

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

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

Ответ 7

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

@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: script отобразит stderr из% chkfile%, только если размер больше 0

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

Ответ 8

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