Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Проверка свободного места на диске (http://forum.oszone.net/showthread.php?t=204276)

white155 08-04-2011 17:53 1654025

Проверка свободного места на диске
 
Есть команда fsutil volume diskfree C:
которая выводит на экран свободное место. Вопрос, как дальше можно работать с этими данными?

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

Iska 08-04-2011 18:29 1654040

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 1654314

а если сделать следующие

@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 1654395

Можно без вывода в файл:
Код:

@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 1780802

Iska, Можно добавить в этом батнике проверку на отсутствие файлов или нулевой размер в определенной папке.
Просто запускаемая программа зависает если файлов в папке нет, надо чтобы она просто не запускалась.

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

Iska 24-10-2011 23:05 1780955

Цитата:

Цитата Arsenik77
Iska, Можно добавить в этом батнике проверку на отсутствие файлов »

…и папок:
Код:

set sFolder=<Путь к папке>

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

Цитата:

Цитата Arsenik77
…или нулевой размер в определенной папке. »

Поясните?!

Arsenik77 25-10-2011 08:37 1781077

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 1781095

А так?
Код:

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 1781121

Цитата:

Цитата Iska
c:\COPY_1.bak »

Без ковычек работает!!!!


Время: 15:04.

Время: 15:04.
© OSzone.net 2001-