Board logo

标题: [数值计算] 批处理如何实现16进制/十六进制数字的递加/自增运算 [打印本页]

作者: hzlawh    时间: 2016-10-17 20:02     标题: 批处理如何实现16进制/十六进制数字的递加/自增运算

本帖最后由 pcl_test 于 2016-10-17 21:18 编辑

set /p p=<SN.txt
echo %p%

set /a p=p+1
set "pp=%p%"
echo %pp% >SN.txt

echo sh.SendKeys "%p%{ENTER}">>telnet_tmp.vbs
echo WScript.Sleep 1000 >>telnet_tmp.vbs

这样出来的结果不能处理16进制的。 请教完整的每次运行自动对一个形如4C3003876B4283208的文本自动进位。 第一次运行输出4C3003876B4283208 第二次4C3003876B4283209
第三次4C3003876B428320A  ................... 4C3003876B4283210  .....4C3003876B428321F....4C3003876B4283220

请教, 谢谢了!
作者: pcl_test    时间: 2016-10-17 21:02

把4C3003876B4283208拆分为4C3003876B428和3208,对3208进行自增1后与4C3003876B428拼接
  1. set /a a=0x3208+1
  2. cmd /c exit /b %a%
  3. echo;4C3003876B428%=exitcode:~-4%
  4. pause
复制代码

作者: aa77dd@163.com    时间: 2016-10-17 21:37

本帖最后由 aa77dd@163.com 于 2016-10-17 23:35 编辑
  1. @echo off & setlocal EnableDelayedExpansion
  2. <SN.txt set /p "p="
  3. set "Q=#%p%"
  4. echo;%p%
  5. set "newSN="
  6. set "JW=1"
  7. for /L %%i in (-1 -1 -50) do (
  8.     if not "!Q:~%%i,1!"=="#" (
  9.         if !JW!==0 (
  10.             set "newSN=!Q:~%%i,1!!newSN!"
  11.         ) else (
  12.             set /a "bit=0x!Q:~%%i,1! + JW, JW=^!(bit-16)"
  13.             cmd /c exit /b !bit!
  14.             set "newSN=!=exitcode:~-1!!newSN!"
  15.         )
  16.     )
  17. )
  18. echo;newSN:&echo;!newSN!
  19. (>SN.txt echo;!newSN!)
  20. pause
  21. exit
复制代码

作者: pcl_test    时间: 2016-10-17 23:17

回复 3# aa77dd@163.com

可进一步判断如果没有进位则余下位不再处理
作者: hzlawh    时间: 2016-11-19 12:58

非常感谢各位大侠




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2