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

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

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

回复 1# jshuanya


    第6行的"delims="删掉,可以实现第2个需求。
测试代码之前请做好备份

TOP

本帖最后由 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,
前者是硬盘官方容量,后者是格式化后可用容量。
用哪个任君选择。

TOP

回复  jshuanya


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



    谢谢两位大神,可以使用。

TOP

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

TOP

回复 5# aloha20200628

感谢。

TOP


用本例可以敲打一下纯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';
复制代码

TOP

返回列表