[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] [已解决]能否让 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。请教大侠。谢谢

回复  hnfeng


   
第一行时因为之前没有定义变量__unit ,因此会通过条件 if not defined __unit ,然 ...
Five66 发表于 2024-10-30 19:22



    谢谢指教,明白了

TOP

回复  hnfeng

给另一个版本以供参考...
aloha20200628 发表于 2024-10-30 18:15



    多谢多谢,更完美了。

当然我更看不懂了,直接用了

TOP

回复 4# hnfeng


   
第一行时因为之前没有定义变量__unit ,因此会通过条件 if not defined __unit ,然后执行 set  __unit ,执行成功后变量  __unit 会被定义
后面的行因为变量 __unit 已经定义了 ,if not defined __unit条件不通过就不执行了 ,这也意味着 ,如果多次使用命令获取磁盘空间时 ,得先删除变量__unit
至于结果 ,是依赖powershell的输出的 ,不知道powershell的输出会不会随着空间的不同而变化 ,GB级别是没问题 ,其他级别的没测试 ,不清楚

TOP

本帖最后由 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
复制代码

TOP

本帖最后由 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:\
复制代码

TOP

试试将ps命令换成
(Get-PSDrive -Name 'C')|out-string
然后在bat里提取 ,例如
Five66 发表于 2024-10-30 17:32



    多谢多谢

TOP

试试将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
复制代码

TOP

返回列表