Board logo

标题: [数值计算] [已解决]能否让 powershell 获取磁盘空间 以适当的单位显示出来 [打印本页]

作者: hnfeng    时间: 6 天前 15:55     标题: [已解决]能否让 powershell 获取磁盘空间 以适当的单位显示出来

本帖最后由 hnfeng 于 2024-10-30 17:41 编辑

批处理里面
  1. 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里提取 ,例如
  1. @echo off
  2. 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
  3. echo  %__size% %__unit%
  4. 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:\
  1. Name           Used (GB)     Free (GB) Provider      Root
  2. ----           ---------     --------- --------      ----
  3. C                 443.63        509.93 FileSystem    C:\
复制代码

作者: aloha20200628    时间: 6 天前 18:15

本帖最后由 aloha20200628 于 2024-10-30 19:12 编辑

回复 1# hnfeng

给另一个版本以供参考...
  1. @echo off &for /f %%v in (
  2.   '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];" '
  3. ) do echo,%%v
  4. 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