CMDshell中的可用空间

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

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

如果有任何想法,我想在开始之前知道。 从Sysinternals试用DU.EXE实用程序,但只显示占用的空间。

Solutions Collecting From Web of "CMDshell中的可用空间"

如果你运行“ dir c:\ ”,最后一行会给你可用的磁盘空间。

编辑:更好的解决方案:“ fsutil volume diskfree c:

可能的解决方案:

 dir|find "bytes free" 

一个更“ 先进的解决方案 ”,Windows Xp及更高版本:

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

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

您可以通过在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% 

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

 @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输出不同(例如,不同的语言环境或语言设置),则需要调整脚本。

df.exe

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

你可以从http://www.paulsadowski.com/WSH/cmdprogs.htm,http://unxutils.sourceforge.net/或其他地方得到它。 这是一个像du一样的标准unix-util。

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}' 

cscript是第三方应用程序吗? 我建议尝试微软脚本 ,在那里你可以使用编程语言(JScript,VBS)来检查列表可用磁盘空间 。

所有当前的Windows版本(包括2008)都提供脚本基础结构。

使用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:\格式作为驱动器号

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

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