CMD shell中的可用空间

89 windows cmd

有没有办法在不必安装某些第三方应用程序的情况下获取CMD中磁盘或文件夹的可用磁盘空间量?

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

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

Nic*_*ico 105

如果你运行" dir c:\",最后一行将给你可用的磁盘空间.

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

  • 它也适用于挂载点,而 dir 则不然! (2认同)
  • Dir运行良好,但请注意,如果驱动器为空,则必须创建一个虚拟文件.否则,它不会给驱动器免费空间(<3 Ms :) (2认同)
  • FSUTIL 无法在应用了某些访问限制策略的计算机上运行。(即使“dir”可以完成这项工作 - 有点。) (2认同)
  • fsutil 解决方案返回“错误:访问被拒绝”,除非我以提升的权限运行它。 (2认同)

Von*_*onC 45

可能的解决方案:

dir|find "bytes free"
Run Code Online (Sandbox Code Playgroud)

适用于Windows XP及更高版本的更" 高级解决方案 ":

wmic /node:"%COMPUTERNAME%" LogicalDisk Where DriveType="3" Get DeviceID,FreeSpace|find /I "c:"
Run Code Online (Sandbox Code Playgroud)

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

  • WMI为+1.应该是唯一稳定的解决方案.依靠特定语言(查找)可能是一个坏主意:) (5认同)
  • @Pacerier:我想我记得`fsutil`需要管理员权限才能运行,不管你用它做什么. (2认同)

lit*_*lit 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%
Run Code Online (Sandbox Code Playgroud)

如果要将可用空间与所需空间进行比较,可以执行以下操作.我用千位分隔符指定了数字,然后删除它们.没有逗号很难掌握数字.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%
Run Code Online (Sandbox Code Playgroud)


小智 6

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


tom*_*mym 5

df.exe

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

你可以从它http://www.paulsadowski.com/WSH/cmdprogs.htmhttp://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
Run Code Online (Sandbox Code Playgroud)

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

M:\>df -h | grep M: | awk '{print $4}'
Run Code Online (Sandbox Code Playgroud)

  • 对于那些不是OP来这里的人来说,这仍然是一个不错的质量答案 (7认同)
  • 你知道为什么被人欺负吗?因为您没有仔细阅读问题。阅读:“无需安装某些第三方应用程序”。尽管我个人喜欢unxutils,但这里没有回答。 (2认同)

pax*_*blo 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%
Run Code Online (Sandbox Code Playgroud)

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

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

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