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

[文本处理] 求助批处理读写外设速率(USB&SD)时间相减报错

测试USB和SD卡的速率,由于用crystalDiskMark图形界面需要鼠标去操作,有没有不需要图形界面直接运行可以读取USB和SD速率,可以读写到速率,可以比对预设值,达到反馈1
wmic和powershell可以实现吗

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. rem 设置 USB 设备的盘符,需要根据实际情况修改
  4. set "usbDrive=F:"
  5. rem 设置测试文件的大小(单位:MB)
  6. set "testFileSize=100"
  7. rem 设置测试文件的名称
  8. set "testFileName=testfile.dat"
  9. rem 生成测试文件
  10. echo Generating test file...
  11. fsutil file createnew %testFileName% %testFileSize%000000
  12. rem 写入测试
  13. echo Starting write test...
  14. for /f "usebackq delims=" %%a in (`powershell -command "[Math]::Round((Get-Date).ToFileTimeUtc() / 10000, 0)"`) do set "startTime=%%a"
  15. robocopy . %usbDrive% %testFileName% /njh /njs
  16. for /f "usebackq delims=" %%a in (`powershell -command "[Math]::Round((Get-Date).ToFileTimeUtc() / 10000, 0)"`) do set "endTime=%%a"
  17. set /a writeTime=endTime - startTime
  18. if !writeTime! equ 0 (
  19.     echo Write operation was too fast to measure accurately.
  20. ) else (
  21.     set /a writeRate=(%testFileSize% * 1000 * 1000) / writeTime
  22.     echo Write rate: !writeRate! KB/s
  23. )
  24. rem 读取测试
  25. echo Starting read test...
  26. for /f "usebackq delims=" %%a in (`powershell -command "[Math]::Round((Get-Date).ToFileTimeUtc() / 10000, 0)"`) do set "startTime=%%a"
  27. robocopy %usbDrive% . %testFileName% /njh /njs
  28. for /f "usebackq delims=" %%a in (`powershell -command "[Math]::Round((Get-Date).ToFileTimeUtc() / 10000, 0)"`) do set "endTime=%%a"
  29. set /a readTime=endTime - startTime
  30. if !readTime! equ 0 (
  31.     echo Read operation was too fast to measure accurately.
  32. ) else (
  33.     set /a readRate=(%testFileSize% * 1000 * 1000) / readTime
  34.     echo Read rate: !readRate! KB/s
  35. )
  36. rem 清理测试文件
  37. del %testFileName%
  38. del %usbDrive%\%testFileName%
  39. echo Test completed.
复制代码
用豆包自动生成了一个bat,但是运行到计算时间的时候报错,就是下面这段
  1. set /a writeTime=endTime - startTime
  2. if !writeTime! equ 0 (
  3.     echo Write operation was too fast to measure accurately.
  4. ) else (
  5.     set /a writeRate=(%testFileSize% * 1000 * 1000) / writeTime
  6.     echo Write rate: !writeRate! KB/s
  7. )
复制代码
大佬帮我看看哪里错了

TOP

本帖最后由 aloha20200628 于 2025-3-10 22:13 编辑

回复 2# dragon123

这是因为批处有大数运算限制,只能处理整数,且整数最大值是 2147483647。

set /a writeTime=endTime - startTime 改为如下行
  1. for /f %%v in ('powershell "!endTime!-!startTime!" ') do set "writeTime=%%v"
复制代码
set /a writeRate=(%testFileSize% * 1000 * 1000) / writeTime 改为如下行
  1. for /f %%v in ('powershell "(!testFileSize!*1000*1000)/!writeTime!" ') do set "writeRate=%%v"
复制代码
读取测试中的 set /a readTime=... 和 set /a readRate=... 相关行也要参照以上句式同法置换...

TOP

RE: 求助批处理读写外设速率(USB&SD)时间相减报错

回复 3# aloha20200628


    感谢,我试试

TOP

本帖最后由 77七 于 2025-3-12 20:02 编辑

robocopy的操作日志中有速度一项,是否可以不用另外计算时间了呢。另外不懂就问,这种方式科学吗...
bat小白,请多指教!谢谢!

TOP

返回列表