CMD批处理中如何移除变量中的逗号并正常参与数值计算
CMD批处理内存数值累加报错解决方案
错误根本原因
- 未开启延迟环境变量扩展:你使用
!变量!格式的延迟扩展语法前,没有在脚本开头启用对应配置,系统会将!识别为普通字符,无法正确读取变量值,计算时出现空值导致运算符缺失报错。 - For循环变量格式错误:在.bat/.cmd脚本文件中使用for循环时,循环变量需要写为
%%A、%%B的双百分号格式,你当前用的单百分号是CMD命令行直接执行时的写法,放在脚本中无法正确获取值。 - 累加变量未初始化:如果
total变量没有提前赋初始值0,首次计算时空值也会触发运算错误。
修复后的完整代码
@Echo off :: 开启延迟环境变量扩展 setlocal enabledelayedexpansion :: 初始化累加变量 set total=0 REM 获取指定服务对应进程PID for /f "tokens=2 delims=," %%A in ('tasklist /svc /fi "SERVICES eq .Service02" /FO csv /NH') do ( Set "pidSlv02=%%~A" REM 根据PID获取对应进程内存占用 for /f "tokens=5 delims= " %%B in ('tasklist /fi "pid eq !pidSlv02!" /NH') do ( Set "memSlv02=%%~B" REM 移除数值中的逗号和多余空格 set memSlv02=!memSlv02:,=! set memSlv02=!memSlv02: =! REM 累加内存数值 set /a total=!total! + !memSlv02! Echo 单个进程内存:!memSlv02! K ) ) Echo 总内存占用:!total! K :: 如需将total变量带出当前脚本环境,替换为 endlocal & set total=%total% endlocal
内容的提问来源于stack exchange,提问作者Raul Chiarella
相关产品推荐
相关产品推荐

