标题: [系统相关] 求大佬把获取硬盘信息的BAT代码单位转换成GB,型号只取空格前的 [打印本页]
作者: jshuanya 时间: 2024-1-18 06:22 标题: 求大佬把获取硬盘信息的BAT代码单位转换成GB,型号只取空格前的
- @echo off
- setlocal enabledelayedexpansion
- set "StrDrive="
- for /f "tokens=1* delims==" %%a in ('"wmic DiskDrive where MediaType='Fixed hard disk media' get Model,Size /value | findstr ="') do (
- if "%%a" == "Model" (
- for /f "delims=" %%i in ("%%b") do (
- set StrDrive=!StrDrive!,型号:%%i
- )
- ) else if "%%a" == "Size" (
- for /f "delims=" %%i in ("%%b") do (
- set StrDrive=!StrDrive!,容量:%%i
- )
- )
- )
- set "StrDrive=!StrDrive:~1!"
- echo,!StrDrive!
- pause
复制代码
作者: ShowCode 时间: 2024-1-18 08:36
回复 1# jshuanya
第6行的"delims="删掉,可以实现第2个需求。
作者: ppll2030 时间: 2024-1-18 11:30
本帖最后由 ppll2030 于 2024-1-18 11:46 编辑
回复 1# jshuanya
把11行替换为下面三行,可实现单位GB显示。- set SizeGB=%%i
- set /a SizeGB=!SizeGB:~, -6!/1000
- set StrDrive=!StrDrive!,容量:!SizeGB!GB
复制代码
第二行最后的1000也可以换成1073,
前者是硬盘官方容量,后者是格式化后可用容量。
用哪个任君选择。
作者: jshuanya 时间: 2024-1-18 20:29
回复 jshuanya
把11行替换为下面三行,可实现单位GB显示。第二行最后的1000也可以换成1073,
前 ...
ppll2030 发表于 2024-1-18 11:30
谢谢两位大神,可以使用。
作者: aloha20200628 时间: 2024-1-18 21:52
本帖最后由 aloha20200628 于 2024-1-18 21:56 编辑
批处理脚本不支持浮点运算,不计较误差可用整数除法凑合...
现给出一个bat+jscript混编版本,让后者的浮点运算功能给前者帮个忙
当然亦可调用其他内置浮点运算功能的vbs/mshta/ps/python等有关代码...
以下代码可存为 test.bat 运行- @set @v=1 /*
- @echo off & setlocal enabledelayedexpansion
- for /f "skip=1 delims=" %%a in (' "wmic diskdrive get model,size" ') do (
- set "size=" & set "z=%%a" & for /f "delims=" %%a in ("!z: =.!") do (set "size=%%~xa")
- for /f "tokens=1 delims= " %%b in ("!z!") do set "line=!line!型号:%%b"
- if defined size for /f %%c in ('cscript /e:jscript "%~f0" !size:~1!') do (set "line=!line!,容量:%%c/")
- )
- echo,!line:~,-1!
- endlocal & pause & exit/b
- */
- WSH.echo((WSH.arguments(0)/1073741824).toFixed(0)+'GB');
复制代码
作者: jshuanya 时间: 2024-1-19 09:08
回复 5# aloha20200628
感谢。
作者: aloha20200628 时间: 2024-1-19 12:23
用本例可以敲打一下纯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楼代码作个对比- @set @v=1 /*
- @echo off & setlocal enabledelayedexpansion
- for /f "skip=1 delims=" %%a in ('wmic diskdrive get model^,size') do (
- set "size=" & set "z=%%a" & for /f "delims=" %%a in ("!z: =.!") do (set "size=%%~xa")
- for /f "tokens=1 delims= " %%b in ("!z!") do set "line=!line!型号:%%b"
- if defined size (cscript /e:jscript "%~f0" !size:~1!>0.0 & set/p v=<0.0 & set "line=!line!,容量:!v!/")
- )
- echo,!line:~,-1!
- (del 0.0) & endlocal & pause & exit/b
- */
- (WSH.arguments(0)/1073741824).toFixed(0)+'GB';
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |