In a .bat file, how can I test available disk space?

I have a .bat script, which starts on powering up a dedicated backup server, saves the productive environment using Robocopy, and shuts down the server when done.

It does some checks before saving, and requests appropriate measures when something is not OK, for example when the target JBOD case was not detected due to being powered off.

There is one more caveat, though, which I was not able to handle so far.

How can I test in the .bat file, whether I have enough space on the target disks to receive all the files or not? (It's OK to test for a fixed space size, modified periodically; currently it's near to 100 GB.)

Is it even possible? If so, what command do I need to research?


I suggest using a PowerShell script for that.

wmic returns the size in bytes, batch is limited to number comparisons of signed 32-bit integers, far below 100GB. You would have to truncate the number first.

PowerShell

if ((Get-WMIObject Win32_Logicaldisk -filter "deviceid='C:'").FreeSpace -gt 100GB){
  "yes enough free space"
} else {
  "not enough free space"
}

I have to extend the above information about number comparison in batch.
If numbers are contained in equal length strings they can be validly compared as strings.
A string comparison takes place character by character, a leading space/zero is less than 1.

At the moment the largest hard drives size is 10TB = 10995116277760 bytes taking 14 decimal places - the following batch uses 15 places for all numbers.

@Echo off
Rem        543210987654321
Set "Blank=               "
Set "GB100=   107374182400"
Set "TB_10= 10995116277760"

for /f "tokens=2" %%A in (
  'wmic LogicalDisk Get DeviceID^,FreeSpace ^| find /i "C:"'
) Do Set "FreeSpace=%Blank%%%A"
Set "FreeSpace=%FreeSpace:~-15%"

Echo FreeSpace="%FreeSpace%"
Echo    100 GB="%GB100%"

If "%FreeSpace%" gtr "%GB100%" (
  Echo yes enough free space
) else (
  Echo not enough free space
)

Sample output:

> Check-FreeSpace.cmd
FreeSpace="   101606346752"
   100 GB="   107374182400"
not enough free space

> Check-FreeSpace.cmd
FreeSpace="  1181504520192"
   100 GB="   107374182400"
yes enough free space

The simplest way is to look at the last line in dir output

dir /-c /w C: | find "bytes free"

You can also get the size value directly by getting the 3rd token in the output

FOR /F "tokens=3 USEBACKQ" %%F IN (`dir /-c /w C:`) DO set "size=%%F"
echo %size%

However it's not reliable as the string may be different in another language. And also note that sometimes you have a lot of freespace but can't write any more files because you've reached some limits like maximum file size or maximum number of files in a volume/directory...

The most correct way is

wmic LogicalDisk where DeviceID='C:' Get FreeSpace /value