找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 12004|回复: 7

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

[复制链接]
发表于 2024-10-30 15:55:24 | 显示全部楼层 |阅读模式
本帖最后由 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。请教大侠。谢谢

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2024-10-30 17:32:16 | 显示全部楼层
试试将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
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

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



    多谢多谢
 楼主| 发表于 2024-10-30 17:49:17 | 显示全部楼层
本帖最后由 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:\
复制代码
发表于 2024-10-30 18:15:05 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2024-10-30 19:22:09 | 显示全部楼层
回复 4# hnfeng


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

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



    多谢多谢,更完美了。

当然我更看不懂了,直接用了
 楼主| 发表于 2024-10-30 20:20:38 | 显示全部楼层
回复  hnfeng


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



    谢谢指教,明白了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 18:20 , Processed in 0.016492 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表