CMD shell中的可用空间

时间:2008-11-16 11:04:34

标签: windows cmd

有没有办法获取CMD中磁盘或文件夹的可用磁盘空间量 无需安装某些第三方应用程序?

我有一个将大文件复制到给定目录的CMD,当然可以使用 从复制命令返回errorlevel,但是我必须等待时间 复制文件(例如......)然后磁盘已满并且复制操作失败。

我想在开始复制之前知道它是否有任何想法。从Sysinternals尝试了DU.EXE实用程序,但显示只占用空间。

10 个答案:

答案 0 :(得分:102)

如果您运行“dir c:\”,最后一行将为您提供可用磁盘空间。

修改 更好的解决方案:“fsutil volume diskfree c:

答案 1 :(得分:44)

可能的解决方案:

dir|find "bytes free"

Windows XP及更高版本的更多“advanced solution”:

wmic /node:"%COMPUTERNAME%" LogicalDisk Where DriveType="3" Get DeviceID,FreeSpace|find /I "c:"

Windows Management Instrumentation Command-line(WMIC)工具(Wmic.exe) 可以收集有关Windows Server 2003以及Windows XP或Vista的大量信息。该工具使用Windows Management Instrumentation(WMI)访问底层硬件。不适用于Windows 2000。

答案 2 :(得分:6)

您可以在DIR命令上使用/ -C来避免使用逗号。

FOR /F "usebackq tokens=3" %%s IN (`DIR C:\ /-C /-O /W`) DO (
    SET FREE_SPACE=%%s
)
ECHO FREE_SPACE is %FREE_SPACE%

如果要将可用空间与所需空间进行比较,可以执行以下操作。我用千位分隔符指定了数字,然后删除它们。没有逗号很难掌握数字。 SET / A很好,但它停止使用大数字。

SET EXITCODE=0
SET NEEDED=100,000,000
SET NEEDED=%NEEDED:,=%

IF %FREE_SPACE% LSS %NEEDED% (
    ECHO Not enough.
    SET EXITCODE=1
)
EXIT /B %EXITCODE%

答案 3 :(得分:5)

以下脚本将为您提供驱动器上的空闲字节:

@setlocal enableextensions enabledelayedexpansion
@echo off
for /f "tokens=3" %%a in ('dir c:\') do (
    set bytesfree=%%a
)
set bytesfree=%bytesfree:,=%
echo %bytesfree%
endlocal && set bytesfree=%bytesfree%

请注意,这取决于dir命令的输出,该命令需要包含格式为24 Dir(s) 34,071,691,264 bytes free的可用空间的最后一行。具体做法是:

  • 它必须是最后一行(或者您可以修改for循环以明确检测该行,而不是依赖于为每一行设置bytesfree
  • 可用空间必须是第三个“单词”(或者您可以更改tokens=位以获得不同的单词)。
  • 千位分隔符是,个字符(或者您可以将替换从逗号更改为其他内容)。

它不会污染您的环境命名空间,在退出时仅设置bytesfree变量。如果您的dir输出不同(例如,不同的区域设置或语言设置),则需要调整脚本。

答案 4 :(得分:4)

df.exe

显示所有磁盘;总的,使用的和免费的容量。您可以通过各种命令行选项更改输出。

您可以从http://www.paulsadowski.com/WSH/cmdprogs.htmhttp://unxutils.sourceforge.net/或其他地方获取。这是一个标准的unix-util,比如du。

df -h将显示所有已使用的驱动器和可用磁盘空间。例如:

M:\>df -h
Filesystem      Size  Used Avail Use% Mounted on
C:/cygwin/bin   932G   78G  855G   9% /usr/bin
C:/cygwin/lib   932G   78G  855G   9% /usr/lib
C:/cygwin       932G   78G  855G   9% /
C:              932G   78G  855G   9% /cygdrive/c
E:              1.9T  1.3T  621G  67% /cygdrive/e
F:              1.9T  201G  1.7T  11% /cygdrive/f
H:              1.5T  524G  938G  36% /cygdrive/h
M:              1.5T  524G  938G  36% /cygdrive/m
P:               98G   67G   31G  69% /cygdrive/p
R:               98G   14G   84G  15% /cygdrive/r

Cygwin免费提供:https://www.cygwin.com/ 它为命令提示符添加了许多强大的工具。为了获得驱动器M上的可用空间(在窗口中映射到共享驱动器),可以输入:

M:\>df -h | grep M: | awk '{print $4}'

答案 5 :(得分:4)

使用这个命令可以找到所有分区,大小和可用空间:wmic logicaldisk get size, freespace, caption

答案 6 :(得分:1)

使用paxdiablo出色的解决方案我写了一些更复杂的批处理脚本,它使用驱动器号作为传入参数并检查驱动器是否存在一种棘手(但不美)的方式:

@echo off
setlocal enableextensions enabledelayedexpansion
set chkfile=drivechk.tmp
if "%1" == "" goto :usage
set drive=%1
set drive=%drive:\=%
set drive=%drive::=%
dir %drive%:>nul 2>%chkfile%
for %%? in (%chkfile%) do (
  set chksize=%%~z?
)
if %chksize% neq 0 (
  more %chkfile%
  del %chkfile%
  goto :eof
)
del %chkfile%
for /f "tokens=3" %%a in ('dir %drive%:\') do (
  set bytesfree=%%a
)
set bytesfree=%bytesfree:,=%
echo %bytesfree% byte(s) free on volume %drive%:
endlocal

goto :eof
:usage
  echo.
  echo   usage: freedisk ^<driveletter^> (eg.: freedisk c)

note1:你可以输入简单的字母(例如x)或者可以在参数中使用x:或x:\ format作为驱动器号

note2:只有当大小大于0时,脚本才会显示来自%chkfile%的stderr

note3:我将此脚本保存为freedisk.cmd(参见用法)

答案 7 :(得分:1)

我做出了一些变化,可以从脚本中生成该信息:

volume C: - 49 GB total space / 29512314880 byte(s) free

我使用 diskpart 来获取此信息。

@echo off
setlocal enableextensions enabledelayedexpansion
set chkfile=drivechk.tmp
if "%1" == "" goto :usage
set drive=%1
set drive=%drive:\=%
set drive=%drive::=%
dir %drive%:>nul 2>%chkfile%
for %%? in (%chkfile%) do (
  set chksize=%%~z?
)
if %chksize% neq 0 (
  more %chkfile%
  del %chkfile%
  goto :eof
)
del %chkfile%
echo list volume | diskpart | find /I " %drive% " >%chkfile%
for /f "tokens=6" %%a in ('type %chkfile%' ) do (
    set dsksz=%%a
)
for /f "tokens=7" %%a in ('type %chkfile%' ) do (
    set dskunit=%%a
)
del %chkfile%
for /f "tokens=3" %%a in ('dir %drive%:\') do (
  set bytesfree=%%a
)
set bytesfree=%bytesfree:,=%
echo volume %drive%: - %dsksz% %dskunit% total space / %bytesfree% byte(s) free
endlocal

goto :eof
:usage
  echo.
  echo   usage: freedisk ^<driveletter^> (eg.: freedisk c)

答案 8 :(得分:0)

cscript是第三方应用吗? 我建议您尝试Microsoft Scripting,在那里您可以使用编程语言(JScript,VBS)来检查List Available Disk Space之类的内容。

脚本基础结构存在于所有当前Windows版本(包括2008)上。

答案 9 :(得分:0)

在Windows 10上,如果复制的文件对于目标目录而言过大,则复制和xcopy操作将立即失败。因此,在开始复制操作之前,不再需要检查可用的可用磁盘空间。