Войти

Показать полную графическую версию : [решено] Проверка свободного места на диске


white155
08-04-2011, 17:53
Есть команда fsutil volume diskfree C:
которая выводит на экран свободное место. Вопрос, как дальше можно работать с этими данными?

В итоге надо чтобы в переменной, допустим f, было число с количеством свободного места в байтах

Iska
08-04-2011, 18:29
white155, разбором, наподобие:
@echo off
setlocal enableextensions enabledelayedexpansion

for /f "skip=2 tokens=2 delims=:" %%i in ('fsutil volume diskfree C:') do set sFreeSize=%%i

if defined sFreeSize echo [%sFreeSize%]

endlocal
exit /b 0

Или же, аналогично:
@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq tokens=2 delims==" %%i in (`wmic.exe LogicalDisk where "Name='c:'" get FreeSpace /value`) do set sFreeSize=%%i

if defined sFreeSize echo [%sFreeSize%]

endlocal
exit /b 0


На практике же, например, для сравнения, данный подход не очень годится вследствие того, что «sFreeSize» — строка, а попытка перевести его в псевдочисло («set /a …») упирается в ограниченную разрядность командного процессора (числа ограничены 32 битами точности).

white155
08-04-2011, 23:54
а если сделать следующие

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq tokens=2 delims==" %%i in (`wmic.exe LogicalDisk where "Name='c:'" get FreeSpace /value`) do set sFreeSize=%%i

if defined sFreeSize echo %sFreeSize:~0,-7%> C:\FreeSpace.log

endlocal
exit /b 0

можно, будет применить команду set q= и вытащить число каким-то образом из созданного файла

Iska
09-04-2011, 05:34
Можно без вывода в файл:
@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq tokens=2 delims==" %%i in (
`wmic.exe LogicalDisk where "Name='c:'" get FreeSpace /value`
) do set sFreeSize=%%i

if defined sFreeSize (
set sFreeSizePseudoMb=%sFreeSize:~0,-7%
echo [!sFreeSizePseudoMb!]
)

endlocal
exit /b 0

Arsenik77
24-10-2011, 17:59
Iska, Можно добавить в этом батнике проверку на отсутствие файлов или нулевой размер в определенной папке.
Просто запускаемая программа зависает если файлов в папке нет, надо чтобы она просто не запускалась.

Программу запускаю перед endlocal

Iska
24-10-2011, 23:05
Iska, Можно добавить в этом батнике проверку на отсутствие файлов »
…и папок:
set sFolder=<Путь к папке>

>nul (dir /b "%sFolder%" | find.exe /v "") && "<Путь к Вашей программе>"

…или нулевой размер в определенной папке. »
Поясните?!

Arsenik77
25-10-2011, 08:37
Iska, пишет "синтаксическая ошибка" или если убрать пробелы пишет "недопустимый путь"


set sFolder=t:\SS\1
>nul (dir /b "%sFolder%" | find.exe /v "") && "call "c:\Program Files\Copy Muppy\Copy Muppy.exe" c:\COPY_1.bak -r"

Iska
25-10-2011, 09:15
А так?
set sFolder=t:\SS\1
>nul (dir /b "%sFolder%" | find.exe /v "") && "c:\Program Files\Copy Muppy\Copy Muppy.exe" "c:\COPY_1.bak" -r

Arsenik77
25-10-2011, 09:50
c:\COPY_1.bak » Без ковычек работает!!!!




© OSzone.net 2001-2012