Есть ли способ получить количество свободного дискового пространства на диске или в папке в CMD без необходимости установки сторонних приложений?
У меня есть CMD, который копирует большой файл в заданный каталог и, конечно, мог бы использовать возврат уровня ошибки из команды копирования, но тогда мне нужно дождаться времени, необходимого для копирования файла (например, ... диск заполнен, и операция копирования не выполняется).
Прежде чем приступить к копированию, я хотел бы знать, есть ли это вообще идея. Пробовал использовать утилиту DU.EXE от Sysinternals, но она показывает только занимаемое пространство.
Ответы:
Если вы запустите "
dir c:\
", последняя строка предоставит вам свободное место на диске.Изменить: Лучшее решение: "
fsutil volume diskfree c:
"источник
dir ..*
(илиdir c:\thing\..*
) покажет очень короткий список, независимо от того, есть ли в каталоге ноль или много файлов.Возможное решение:
более « продвинутое решение » для Windows Xp и выше:
Инструментария управления Windows из командной строки (WMIC) инструмент (Wmic.exe) может собрать огромное количество информации о о Windows Server 2003, а также Windows XP или Vista. Инструмент обращается к базовому оборудованию с помощью инструментария управления Windows (WMI). Не для Windows 2000.
Как отметил Александр Штор в комментариях :
dir
' по-прежнему выполняет свою работу),dir
' зависит от локали.источник
@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
fsutil
права администратора даже для запуска, независимо от того, что вы с ним делаете.Используя эту команду, вы можете найти все разделы, размер и свободное место:
wmic logicaldisk get size, freespace, caption
источник
Вы можете избежать запятых, используя / -C в команде DIR.
Если вы хотите сравнить доступное пространство с необходимым пространством, вы можете сделать что-то вроде следующего. Я указал число с разделителем тысяч, а затем удалил их. Номер без запятых сложно разобрать. SET / A хорош, но перестает работать с большими числами.
источник
Следующий сценарий предоставит вам бесплатные байты на диске:
Обратите внимание, что это зависит от вывода вашей
dir
команды, для которой требуется последняя строка, содержащая свободное пространство формата24 Dir(s) 34,071,691,264 bytes free
. В частности:for
цикл для явного обнаружения строки, а не полагаться на настройкиbytesfree
для каждой строки).tokens=
бит, чтобы получить другое слово).,
символ (или вы можете заменить запятую на что-то другое).Он не загрязняет пространство имен вашей среды, устанавливая только
bytesfree
переменную при выходе. Если вашdir
вывод отличается (например, другие языковые настройки или языковые настройки), вам нужно будет настроить сценарий.источник
df.exe
Показывает все ваши диски; общая, использованная и свободная емкость. Вы можете изменить вывод с помощью различных параметров командной строки.
Вы можете получить его по адресу http://www.paulsadowski.com/WSH/cmdprogs.htm , http://unxutils.sourceforge.net/ или где-нибудь еще. Это стандартный unix-util наподобие du.
df -h
покажет все используемое и доступное дисковое пространство вашего диска. Например:Cygwin доступен бесплатно по адресу : https://www.cygwin.com/. Он добавляет множество мощных инструментов в командную строку. Чтобы получить только доступное пространство на диске M (которое отображается в Windows на общий диск), можно ввести:
источник
Используя отличное решение paxdiablo, я написал немного более сложный пакетный скрипт, который использует букву диска в качестве входящего аргумента и проверяет, существует ли диск хитрым (но не красивым) способом:
note1: вы можете ввести простую букву (например, x) или использовать x: или x: \ format как букву диска в аргументе
note2: скрипт будет отображать stderr из% chkfile%, только если размер больше 0
note3: я сохранил этот скрипт как freedisk.cmd (см. использование)
источник
Я делаю вариант, чтобы сгенерировать это из сценария:
volume C: - 49 GB total space / 29512314880 byte(s) free
Я использую diskpart для получения этой информации.
@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)
источник
Cscript - это стороннее приложение? Я предлагаю попробовать Microsoft Scripting , где вы можете использовать язык программирования (JScript, VBS), чтобы проверить такие вещи, как список доступного дискового пространства .
Инфраструктура сценариев присутствует во всех текущих версиях Windows (включая 2008).
источник
cscript
это Microsoft Scripting. Это консольная версия интерпретатора сценариев Windows (wscript
версия GUI).