Мне нужно запустить программу, которая должна найти, сколько свободного места у меня на конкретном диске ( unc или regular)

Мне нужно, чтобы он работал под CMD .(Нет пс)

Цель :

c:\> something e:
     1902323213 //nevermind mb /gb

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

Так что я попробовал?

Я пробовал это:

DIR \\dsmain\ls_BackUp\*.* | find "free"

который дает :

2 Dir(s) 311,285,014,528 bytes free

Я также попробовал это: (худшее)

fsutil volume diskfree c:

который дает :

Total # of free bytes        : 54761066496
Total # of bytes             : 255953203200
Total # of avail free bytes  : 54761066496

Вопрос:

Использование cmd (без пс) - как запустить команду, которая возвращает только свободное место на диске?

примечание:

Sql-серверу нужно открыть bak-файл в удаленном месте, и мне нужно проверить там свободное место, поэтому sql выполняет команду cmd, и я могу получить результат. Поэтому я не хочу начинать использовать строковые манипуляции для извлечения числа

3 ответа3

5

Вы можете использовать инструмент командной строки wmic для запроса Win32_LogicalDisk

wmic LOGICALDISK where name="C:" get freespace

Это вернет две строки в формате

FreeSpace
2881409024

или же

wmic LOGICALDISK where name="C:" get freespace | find /v "Free"

который дает только число

2

Ниже возвращается просто свободное место в байтах.

@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%
pause>nul
0

Вот однострочная команда, которую вы можете использовать в командной строке:

for /f "tokens=3" %G in ('"dir /-c "\\dsmain\ls_BackUp\" "') do @set free=%G

Чтобы отобразить значение свободного места, вы можете echo его:

echo %free%

Как это устроено

Выходные данные команды dir анализируются построчно до конца. Последняя строка всегда та, которая содержит количество свободного места, если путь не является недействительным. Чтобы избежать необходимости иметь дело с тысячами разделителей (которые учитывают локали и могут быть настроены), вам нужно использовать параметр /-c чтобы полностью их удалить. Каждая строка токенизируется с использованием пробелов в качестве разделителей, а третий токен каждый раз назначается переменной %free% .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .