如果我运行这个命令:
fsutil 卷磁盘空闲 e:
我得到:
错误:访问被拒绝。
只有通过手动打开“提升的”cmd.exe,它才会输出命令的实际输出。
我需要一个(内置)命令来确定给定磁盘(驱动器号)的可用空间,即使 cmd.exe 不是“提升的”(管理员)。
(它需要提升的原因显然是“fsutil”也可以做很多其他的事情。)
答案1
这与@It Wasn't Me 的回答一致
如果你只是想快速查看输出,这通常是最快的:
DIR /AD/D E: | FIND /I " bytes free"
--[Result]--
1 Dir(s) 28,616,892,416 bytes free
DIR /AD
仅返回目录,/D
范围较宽,这意味着每行返回许多条目。如果您有大量目录,但只有少数文件,请将其更改为DIR /A-D/D
我不明白为什么你需要摆脱这个输出的格式,因为FSUtil
提供了一堆额外的文本并且它在问题中没有提到,它还包括逗号。
如果您确实想删除逗号,则提及/-C
将删除逗号。
如果您想要单独使用数字(无论是否带逗号),则循环for /f
是必要的,@It Wasn't Me's 已经很好地介绍了这一点。
答案2
1.使用 cmd 内部命令dir
和/e
从输出中/-c
删除,
17 Dir(s) 21,489,500,160 bytes free
2.for /f
使用循环重定向中的第三个标记来过滤以“字节”+ [一个字符] +“免费”结尾的行findstr /End
1º 2º 3º *º
_| _____| __________| __________*
17 Dir(s) 21489500160 bytes free
tokens = 3º |----------| is the same bytes.free to findstr
- 对于命令行:
for /f "tokens=3delims= " %i in ('dir E: /d /-c ^|findstr /e bytes.free')do @echo\%i
- 对于 bat 文件替换
%i
为%%i
:
@echo off
for /f "tokens=3delims= " %%i in ('dir E: /d /-c ^|findstr /e bytes.free')do echo\%%i
- 您可以从 PowerShell 获得一些帮助,将可用大小转换为 GB:
@echo off
for /f "tokens=3delims= " %i in ('dir E: /d /-c ^|findstr /e bytes.free
')do Powershell -nop -c "$free=[math]::round(8357258532/1GB); Write-host $free'GB' -NoNewline
答案3
你可以dir
这样做(自 Vista IIRC 以来)wmic
:
wmic volume where driveletter="E:" get freespace
wmic volume get driveletter,freespace | findstr E:
或者如果你使用 Powershell,它可以在没有帮助的情况下完成整个工作:
powershell -c write-host (get-volume -driveletter c).sizeremaining
powershell -c write-host [math]::round((get-volume -driveletter c).sizeremaining/1GB)