CMDshell中的可用空间
有没有办法在CMD中获得磁盘或文件夹的可用磁盘空间量,而无需安装某些第三方应用程序?
我有一个CMD,将一个大文件复制到一个给定的目录,当然可以使用复制命令的错误级别返回,但是我必须等待复制文件所需的时间(例如…然后磁盘已满并且复制操作失败)。
如果有任何想法,我想在开始之前知道。 从Sysinternals试用DU.EXE实用程序,但只显示占用的空间。
如果你运行“ dir c:\
”,最后一行会给你可用的磁盘空间。
编辑:更好的解决scheme:“ fsutil volume diskfree c:
”
可能的解决scheme:
dir|find "bytes free"
一个更“ 先进的解决scheme ”,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
variables。 如果您的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上的可用空间(如在窗口中映射到共享驱动器),可以input:
M:\>df -h | grep M: | awk '{print $4}'
cscript是第三方应用程序吗? 我build议尝试微软脚本 ,在那里你可以使用编程语言(JScript,VBS)来检查列表可用磁盘空间 。
所有当前的Windows版本(包括2008)都提供脚本基础结构。
使用paxdiablo优秀的解决scheme,我写了一个更复杂的批处理脚本,它使用驱动器号作为传入参数,并检查驱动器是否存在一个棘手(但不是美观)的方式:
@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(请参阅用法)