如何确保批量存放足够的磁盘空间?

时间:2015-05-18 07:04:04

标签: batch-file if-statement diskspace

是否有人知道是否可以确保磁盘在具有批处理的服务器上有足够的空间?

我有一个循环的批处理脚本,在此我想添加一个部分,确保磁盘上有足够的空间,如果不是,则给我一条消息。像这样,很容易解释:

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这使用dir命令的输出来检索可用空间。所有测试都在一个子程序中被破坏,该子程序接收要检查的“驱动器”和所需的字节数作为参数。退出时,如果没有足够的可用空间,则会引发错误级别。

批处理文件中的算术限制为2 ^ 31个有符号整数,因此要处理大于2147483647的值并使用超过2GB的存储单元,需要更多代码。为了避免这种情况,所有信息都以字节表示/检索,填充并作为字符串进行比较。

@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