Ответ 1
Если вы запустите "dir c:\
", последняя строка предоставит вам свободное место на диске.
Edit:
Лучшее решение: "fsutil volume diskfree c:
"
Есть ли способ получить количество свободного дискового пространства на диске или папку в CMD без необходимости устанавливать некоторые сторонние приложения?
У меня есть CMD, который копирует большой файл в данный каталог и может, конечно, использовать returnlevel возвращает из команды copy, но тогда я должен ждать времени требуется скопировать файл (например,... к этому, тогда диск будет заполнен и операция копирования завершится с ошибкой).
Я хотел бы знать, прежде чем начать копирование, если это вообще идея. Пробовал утилиту DU.EXE от Sysinternals, но это только занятое пространство.
Если вы запустите "dir c:\
", последняя строка предоставит вам свободное место на диске.
Edit:
Лучшее решение: "fsutil volume diskfree c:
"
Возможное решение:
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.
Вы можете избежать запятых, используя /-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%
Следующий 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.
Показывает все ваши диски; общая, используемая и свободная емкость. Вы можете изменить вывод с помощью различных параметров командной строки.
Вы можете получить его из 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}'
Является ли cscript сторонним приложением? Я предлагаю попробовать Microsoft Scripting, где вы можете использовать язык программирования (JScript, VBS) для проверки таких вещей, как Список доступных дисковых пространств.
Инфраструктура сценариев присутствует во всех текущих версиях Windows (включая 2008).
Используя 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(см. использование)
С помощью этой команды вы можете найти все разделы, размер и свободное пространство: wmic logicaldisk get size, freespace, caption