标题: [文本处理] 批处理如何实现最后四位不足四位时怎么补零? [打印本页]
作者: info666 时间: 2013-3-26 16:37 标题: 批处理如何实现最后四位不足四位时怎么补零?
- @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="&set "ens="&call :a
-
- call echo %%u %a%%macad%%zero%%%ens%% >>Mac.xls
- )
- cls 生成完成。
- start "" Mac.xls
- pause
- exit
-
- :a
- 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"
- set /a mod = %num% %% 16
- set /a num /=16
-
- set en=%mod% %en%
- if not %num% lss 1 (goto a)
-
- for %%i in (%en%) do (call set ens=%%ens%%%%f:~%%i,1%%)
-
- 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 编辑
- @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.txt
- cls&echo 生成完成。
- start "" Mac.txt
- pause&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%
复制代码
作者: 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 |