CMD外壳中的可用空间


95

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

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

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


我必须假设“第三方安装”而不是“任何其他软件安装”。无需提供或安装任何东西的实际方面。只有机载手段。
亚历山大·斯托尔

Answers:


112

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

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


1
而且它也适用于挂载点,而dir则不然!
LogicDaemon 2014年

2
Dir运作良好,但请注意,如果驱动器为空,则必须创建一个虚拟文件。否则,它不会给驱动器提供可用空间(<3 Ms :)
Balmipour

有没有一种方法来获取空闲字节数?
米娜·雅各布

另外,除了根目录外,dir ..*(或dir c:\thing\..*)都会显示一个很短的清单,无论目录中是否有零个或多个文件。
azhrei

fsutil方法可能不适用于IMDisk RAM驱动器等虚拟驱动器。您将得到:错误:功能不正确。FSUTIL实用程序需要本地NTFS卷。
user2846246 '17

51

可能的解决方案:

dir|find "bytes free"

适用于Windows Xp及更高版本的更“ 高级解决方案 ”:

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

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


正如亚历山大·斯托尔Alexander Stohr)在评论中指出的那样:

  • WMIC也可以看到基于策略的限制。(即使' dir'仍然可以胜任工作),
  • dir”取决于区域设置。

5
WMI +1。应该是唯一稳定的解决方案。依靠特定语言(查找)可能不是一个好主意:)
Joey

要将可用空间放入变量中,可以使用以下方法: @FOR /F "tokens=2 delims==" %%S IN ('wmic /NODE:"%COMPUTERNAME%" LogicalDisk Where ^(DriveType^="3" and DeviceID^="%some_folder:~0,2%"^) Get FreeSpace /VALUE') DO @SET freespace=%%S
Davor Josipovic

3
@Pacerier:我想我记得fsutil需要管理员权限才能运行,无论您使用它做什么。
乔伊


1
@AlexanderStohr好点。我已将您的评论包含在答案中,以提高知名度。
VonC

8

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


7

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

6

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

@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命令的输出,该命令需要最后一行包含format的可用空间24 Dir(s) 34,071,691,264 bytes free。特别:

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

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


6

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

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

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

2
你知道为什么被人欺负吗?因为您没有仔细阅读问题。阅读:《无需安装某些第三方应用程序》。尽管我个人喜欢unxutils,但这里没有回答。
LogicDaemon 2014年

7
对于那些不是OP来这里的人来说,这仍然是一个不错的质量答案
Peter

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)

注意1:您可以在参数中键入简单字母(例如x)或使用x:或x:\格式作为驱动器号

注意2:仅当大小大于0时,脚本才会显示%chkfile%中的stderr

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


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)

0

cscript是第三方应用程序吗?我建议尝试使用Microsoft脚本,您可以在其中使用编程语言(JScript,VBS)检查诸如“ 列出可用磁盘空间”之类的内容

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


1
cscript Microsoft脚本。它是Windows脚本解释器的控制台版本(wscript是GUI版本)。
Synetech

我必须假设“第三方安装”而不是“任何其他软件安装”。无需提供或安装任何东西的实际方面。只有机载手段。
亚历山大·斯托尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.