Board logo

标题: [文本处理] 批处理如何实现最后四位不足四位时怎么补零? [打印本页]

作者: info666    时间: 2013-3-26 16:37     标题: 批处理如何实现最后四位不足四位时怎么补零?

  1. @echo off
  2. set a=001326
  3. set /p macad=请输入Mac地址段:
  4. set /p macn=请输入Mac间隔位:
  5. set /p macs=请输入Mac起始位:
  6. set /p maco=请输入Mac终止位:
  7. set f=0123456789ABCDEF
  8. echo MAC地址表生成中,请稍候……
  9. for /l %%u in (%macs% %macn% %maco%) do (
  10. set /a num=%%u&set "en="&set "ens="&call :a
  11. call echo %%u %a%%macad%%zero%%%ens%% >>Mac.xls
  12. )
  13. cls 生成完成。
  14. start "" Mac.xls
  15. pause
  16. exit
  17. :a
  18. if %num% GTR 4095 set "zero="
  19. if %num% LSS 4096 if %num% GTR 255 set "zero=0"
  20. if %num% LSS 256 if %num% GTR 16 set "zero=00"
  21. if %num% LSS 16 set "zero=000"
  22. set /a mod = %num% %% 16
  23. set /a num /=16
  24. set en=%mod% %en%
  25. if not %num% lss 1 (goto a)
  26. for %%i in (%en%) do (call set ens=%%ens%%%%f:~%%i,1%%)
  27. goto :eof
复制代码

作者: BAT-VBS    时间: 2013-3-26 17:02

请给个例子,那四个变量分别需要输入什么样的值,在哪里补0,补成什么样子。
作者: info666    时间: 2013-3-26 17:37

这个批处理的功能就是给定一个范围的十进制,转换成十六进制,并导出到EXCEL表格里,本来完整的MAC地址是12位的,现在小的只有7位,如15        001326A1F
作者: info666    时间: 2013-3-26 17:37

正常的应该是15        001326A100000F
作者: info666    时间: 2013-3-26 17:40

正常的应该是15        001326A1000F
作者: info666    时间: 2013-3-26 17:41

刚才多输入了两个零
if %num% GTR 4095 set "zero="
if %num% LSS 4096 if %num% GTR 255 set "zero=0"
if %num% LSS 256 if %num% GTR 16 set "zero=00"
if %num% LSS 16 set "zero=000"
看一下这四句有没有什么问题,还有就是不知道加在哪个位置,
作者: BAT-VBS    时间: 2013-3-26 17:43

回复 3# info666


    运行你顶楼的代码之后,输入什么样的值可以得到15        001326A1F?
作者: apang    时间: 2013-3-26 19:55

本帖最后由 apang 于 2013-3-27 12:45 编辑
  1. @echo off
  2. set a=001326
  3. set /p macad=请输入Mac地址段:
  4. set /p macn=请输入Mac间隔位:
  5. set /p macs=请输入Mac起始位:
  6. set /p maco=请输入Mac终止位:
  7. set f=0123456789ABCDEF
  8. echo MAC地址表生成中,请稍候……
  9. (for /l %%u in (%macs% %macn% %maco%) do (
  10.    set /a num=%%u&set "en="
  11.    call :a %%u
  12. ))>Mac.txt
  13. cls&echo 生成完成。
  14. start "" Mac.txt
  15. pause&goto :eof
  16. :a
  17. set /a mod = %num% %% 16
  18. set /a num /=16
  19. call set en=%%f:~%mod%,1%%%en%
  20. if not %num% lss 1 goto a
  21. set en=000%en%
  22. echo %1    %a%%macad%%en:~-4%
复制代码

作者: info666    时间: 2013-3-27 09:00

就是十进制小于4096的数转换成十六进制的结果是不足四位的,我的意思是我输入的数加个判断,如f %num% GTR 4095 set "zero="
if %num% LSS 4096 if %num% GTR 255 set "zero=0"
if %num% LSS 256 if %num% GTR 16 set "zero=00"
if %num% LSS 16 set "zero=000"
看一下这四句有没有什么问题,还有就是不知道加在哪个位置,
作者: apang    时间: 2013-3-27 12:40

回复 9# info666


    不明白你为何一定要用if判断
在16进制数前面补上0,然后截取后面4位,跟你的if判断有区别吗?
作者: info666    时间: 2013-3-27 19:02

回复 8# apang

你这个可以,现有有点小小的地方需要改进,
@echo off
set a=001326
set /p macad=请输入Mac地址段:
set /p macn=请输入Mac间隔位:
set /p macs=请输入Mac起始位:
set /p maco=请输入Mac终止位:
set f=0123456789ABCDEF
echo MAC地址表生成中,请稍候……
(for /l %%u in (%macs% %macn% %maco%) do (
   set /a num=%%u&set "en="
   call :a %%u
))>Mac.xls
cls&echo 生成完成。
start "" Mac.xls
exit&goto :eof

:a
set /a mod = %num% %% 16
set /a num /=16
call set en=%%f:~%mod%,1%%%en%
if not %num% lss 1 goto a

set en=000%en%
echo  %1  %a%%macad%%en:~-4%


输出的结果现在在同一列,能不能分成两列,十进制一列,对应的十六制一列
作者: apang    时间: 2013-3-27 19:34

回复 11# info666


    没有你这种xls表格的生成方法。
后缀改成csv,最后一行的空格改成英文逗号
作者: info666    时间: 2013-3-28 09:17

回复 12# apang


    @echo off
set a=001326
set /p macad=请输入Mac地址段:
set /p macn=请输入Mac间隔位:
set /p macs=请输入Mac起始位:
set /p maco=请输入Mac终止位:
set f=0123456789ABCDEF
echo MAC地址表生成中,请稍候……
(for /l %%u in (%macs% %macn% %maco%) do (
   set /a num=%%u&set "en=" &call echo %%u&call :a)
           
)>Mac.xls
cls&echo 生成完成。
start "" Mac.xls
exit&goto :eof

:a
set /a mod = %num% %% 16
set /a num /=16
call set en=%%f:~%mod%,1%%%en%
if not %num% lss 1 goto a

set en=000%en%
echo  %1 %a%%macad%%en:~-4%


我现在按上面这样的代码输入结果是行1,3,5……为十进制,,,,,,行2,4,6……为十六进制,
作者: apang    时间: 2013-3-28 10:31

回复 13# info666


    你,是个人才
作者: info666    时间: 2013-3-28 10:38

回复 14# apang


   有没有办法实现两列输出结果啊,一列输出十进制,另一列输出十六进制的




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