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


用本例可以敲打一下纯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

返回列表