2015-05-18 3 views
0

Кто-нибудь знает, возможно ли, чтобы на диске было достаточно места на сервере с пакетом?Как я могу убедиться, что достаточно места на диске в пакетном режиме?

У меня есть пакетный скрипт, который петли, и в этом я хотел бы добавить часть, которая гарантирует, что на диске достаточно места и дает мне сообщение, если это не так. Как это, легко объясните:

Check diskspace 
If below 10mb free space 
    echo low diskspace (& probably delete temp files or something) 
    else continue 

Спасибо за помощь!

ответ

1

Используется вывод команды dir для извлечения свободного места. Весь тест прокручивается внутри подпрограммы, которая получает в качестве аргумента «диск» для проверки и количество требуемых байтов. При выходе он повышает уровень ошибок, когда свободного места недостаточно.

Арифметика в пакетных файлах ограничена 2^31 целыми знаками, поэтому для обработки значений больше 2147483647 и для работы с единицами хранения более 2 ГБ требуется дополнительный код. Чтобы этого избежать, вся информация указывается/извлекается в байтах, дополняется и сравнивается как строки.

@echo off 
    setlocal enableextensions disabledelayedexpansion 

    call :checkFreeSpace d: 123456789 && echo OK || echo No space 

    call :checkFreeSpace "\\10.0.0.1\c$" 2000000000 
    if errorlevel 1 (
     echo No space 
    ) else (
     echo OK 
    ) 

    goto :eof 

:checkFreeSpace drive spaceRequired 
    setlocal enableextensions disabledelayedexpansion 
    set "pad=0000000000000000000000000" 
    set "required=%pad%%~2" 
    for %%d in ("%~1\.") do for /f "tokens=3" %%a in (' 
     dir /a /-c "%%~fd" 2^>nul ^| findstr /b /l /c:" " 
    ') do set "freeSpace=%pad%%%a" 
    if "%freeSpace:~-25%" geq "%required:~-25%" exit /b 0 
    exit /b 1 

примечание: Этот метод имеет один нюанс. Если указанная цель - это корень диска, и в нем нет файла/папки, команда dir не найдет ничего, что можно было бы перечислить, и свободное пространство не будет включено в его вывод, что приведет к сбою теста, поскольку свободное пространство будет 0

+0

О, вау, спасибо за отличный ответ. Знающе! Я должен признать, что у меня есть некоторые проблемы, которые заставляют его работать. Вероятно, я на новом стадионе. Я думаю, что моя первая проблема будет заключаться в том, как работает команда callfreepace: checkfreespace. Нужно ли мне что-то еще со сценарием? – MadsTheMan

+0

@Excessium, опубликованный код показывает использование. Самый простой способ - скопировать/вставить подпрограмму в конце вашего пакетного файла и вызвать ее из вашего кода в качестве показа в образце. –

+0

Хорошо, я ценю вашу помощь. Я попробую и сделаю все возможное завтра. Спасибо за ваш ответ. – MadsTheMan

 Смежные вопросы

  • Нет связанных вопросов^_^