标题: [数值计算] [已解决]能否让 powershell 获取磁盘空间 以适当的单位显示出来 [打印本页]
作者: hnfeng 时间: 6 天前 15:55 标题: [已解决]能否让 powershell 获取磁盘空间 以适当的单位显示出来
本帖最后由 hnfeng 于 2024-10-30 17:41 编辑
批处理里面- for /f %%a in ('powershell -Command "(Get-PSDrive -Name 'C').Free"') do set DriveSize=%%a
复制代码
可以获取到磁盘空间
但是获取的是字节数,不直观。有无简单的方法根据大小自动换算以 KB,MB,GB,TB 为单位的数值(若能保留一位小数更好)
不熟悉PS。请教大侠。谢谢
作者: Five66 时间: 6 天前 17:32
试试将ps命令换成
(Get-PSDrive -Name 'C')|out-string
然后在bat里提取 ,例如- @echo off
- for /f "tokens=1-9 delims= " %%a in ('powershell -Command "(Get-PSDrive -Name 'C')|out-string"') do set "__size=%%c"&if not defined __unit set __unit=%%e
- echo %__size% %__unit%
- pause
复制代码
作者: hnfeng 时间: 6 天前 17:40
试试将ps命令换成
(Get-PSDrive -Name 'C')|out-string
然后在bat里提取 ,例如
Five66 发表于 2024-10-30 17:32
多谢多谢
作者: hnfeng 时间: 6 天前 17:49
本帖最后由 hnfeng 于 2024-10-30 17:50 编辑
试试将ps命令换成
(Get-PSDrive -Name 'C')|out-string
然后在bat里提取 ,例如
Five66 发表于 2024-10-30 17:32
结果很对,但我水平低,有点没看懂。能否解释一下:
if not defined __unit set __unit=%%e
是如何获取到上一行的 (GB) 的?最后一行不是有 %%e 吗?为什么不是 C:\- Name Used (GB) Free (GB) Provider Root
- ---- --------- --------- -------- ----
- C 443.63 509.93 FileSystem C:\
复制代码
作者: aloha20200628 时间: 6 天前 18:15
本帖最后由 aloha20200628 于 2024-10-30 19:12 编辑
回复 1# hnfeng
给另一个版本以供参考...- @echo off &for /f %%v in (
- 'powershell "$v,$n=(get-psdrive -name 'c').free,0;while($v/1kb -gt 1){$v/=1kb;$n++};''+('{0:n1}'-f $v)+('B','KB','MB','GB','TB')[$n];" '
- ) do echo,%%v
- pause&exit/b
复制代码
作者: Five66 时间: 6 天前 19:22
回复 4# hnfeng
第一行时因为之前没有定义变量__unit ,因此会通过条件 if not defined __unit ,然后执行 set __unit ,执行成功后变量 __unit 会被定义
后面的行因为变量 __unit 已经定义了 ,if not defined __unit条件不通过就不执行了 ,这也意味着 ,如果多次使用命令获取磁盘空间时 ,得先删除变量__unit
至于结果 ,是依赖powershell的输出的 ,不知道powershell的输出会不会随着空间的不同而变化 ,GB级别是没问题 ,其他级别的没测试 ,不清楚
作者: hnfeng 时间: 6 天前 19:23
回复 hnfeng
给另一个版本以供参考...
aloha20200628 发表于 2024-10-30 18:15
多谢多谢,更完美了。
当然我更看不懂了,直接用了
作者: hnfeng 时间: 6 天前 20:20
回复 hnfeng
第一行时因为之前没有定义变量__unit ,因此会通过条件 if not defined __unit ,然 ...
Five66 发表于 2024-10-30 19:22
谢谢指教,明白了
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |