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

[系统相关] 求大佬把获取硬盘信息的BAT代码单位转换成GB,型号只取空格前的

[复制链接]
发表于 2024-1-18 06:22:51 | 显示全部楼层 |阅读模式
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "StrDrive="
  4. for /f "tokens=1* delims==" %%a in ('"wmic DiskDrive where MediaType='Fixed hard disk media' get Model,Size /value | findstr ="') do (
  5.     if "%%a" == "Model" (
  6.         for /f "delims=" %%i in ("%%b") do (
  7.             set StrDrive=!StrDrive!,型号:%%i
  8.         )
  9.     ) else if "%%a" == "Size" (
  10.         for /f "delims=" %%i in ("%%b") do (
  11.             set StrDrive=!StrDrive!,容量:%%i
  12.         )
  13.     )
  14. )
  15. set "StrDrive=!StrDrive:~1!"
  16. echo,!StrDrive!
  17. pause
复制代码
发表于 2024-1-18 08:36:25 | 显示全部楼层
回复 1# jshuanya


    第6行的"delims="删掉,可以实现第2个需求。
发表于 2024-1-18 11:30:18 | 显示全部楼层
本帖最后由 ppll2030 于 2024-1-18 11:46 编辑

回复 1# jshuanya


    把11行替换为下面三行,可实现单位GB显示。
  1. set SizeGB=%%i
  2. set /a SizeGB=!SizeGB:~, -6!/1000
  3. set StrDrive=!StrDrive!,容量:!SizeGB!GB
复制代码
第二行最后的1000也可以换成1073,
前者是硬盘官方容量,后者是格式化后可用容量。
用哪个任君选择。
 楼主| 发表于 2024-1-18 20:29:05 | 显示全部楼层
回复  jshuanya


    把11行替换为下面三行,可实现单位GB显示。第二行最后的1000也可以换成1073,
前 ...
ppll2030 发表于 2024-1-18 11:30



    谢谢两位大神,可以使用。
发表于 2024-1-18 21:52:18 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-1-18 21:56 编辑


批处理脚本不支持浮点运算,不计较误差可用整数除法凑合...
现给出一个bat+jscript混编版本,让后者的浮点运算功能给前者帮个忙
当然亦可调用其他内置浮点运算功能的vbs/mshta/ps/python等有关代码...
以下代码可存为 test.bat 运行

  1. @set @v=1 /*
  2. @echo off & setlocal enabledelayedexpansion
  3. for /f "skip=1 delims=" %%a in (' "wmic diskdrive get model,size" ') do (
  4.         set "size=" & set "z=%%a" & for /f "delims=" %%a in ("!z: =.!") do (set "size=%%~xa")
  5.         for /f "tokens=1 delims= " %%b in ("!z!") do set "line=!line!型号:%%b"
  6.         if defined size for /f %%c in ('cscript /e:jscript "%~f0" !size:~1!') do (set "line=!line!,容量:%%c/")
  7. )
  8. echo,!line:~,-1!
  9. endlocal & pause & exit/b
  10. */
  11. WSH.echo((WSH.arguments(0)/1073741824).toFixed(0)+'GB');
复制代码
 楼主| 发表于 2024-1-19 09:08:45 | 显示全部楼层
回复 5# aloha20200628

感谢。
发表于 2024-1-19 12:23:04 | 显示全部楼层

用本例可以敲打一下纯P代码中的两个趣点
一。在 for /f...('命令表达式') 句式中的命令表达式若再用双引号内包裹,如 (' "命令表达式" ') 则可省去其中的转义符,示例如下
     须用转义符 ('wmic diskdrive get model^,size')
     不用转义符 (' "wmic diskdrive get model,size" ')
二。用于回收外部命令/程序/脚本运行结果的一个常用方法是 for /f ... %%v in ('命令表达式') do (set "v=%%v"),
      但若外部命令的返回值只是一行数据,也可用另一方法
            (命令表达式)>0.0 & set/p v=<0.0
      当外部命令/程序/脚本被复用多次时,两个方法的系统开销其大小之分还要靠实验证明,但前者却有上述第一项有关打理字符串中特殊字符的问题。

参照以上所述再给一个版本如下,与5楼代码作个对比

  1. @set @v=1 /*
  2. @echo off & setlocal enabledelayedexpansion
  3. for /f "skip=1 delims=" %%a in ('wmic diskdrive get model^,size') do (
  4.         set "size=" & set "z=%%a" & for /f "delims=" %%a in ("!z: =.!") do (set "size=%%~xa")
  5.         for /f "tokens=1 delims= " %%b in ("!z!") do set "line=!line!型号:%%b"
  6.         if defined size (cscript /e:jscript "%~f0" !size:~1!>0.0 & set/p v=<0.0 & set "line=!line!,容量:!v!/")
  7. )
  8. echo,!line:~,-1!
  9. (del 0.0) & endlocal & pause & exit/b
  10. */
  11. (WSH.arguments(0)/1073741824).toFixed(0)+'GB';
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 06:41 , Processed in 0.011606 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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