Показать полную графическую версию : [решено] Проверка свободного места на диске
white155
08-04-2011, 17:53
Есть команда fsutil volume diskfree C:
которая выводит на экран свободное место. Вопрос, как дальше можно работать с этими данными?
В итоге надо чтобы в переменной, допустим f, было число с количеством свободного места в байтах
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= и вытащить число каким-то образом из созданного файла
Можно без вывода в файл:
@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, Можно добавить в этом батнике проверку на отсутствие файлов »
…и папок:
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"
А так?
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.