中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » (已解决)此批处理如何实现输入中间带0的数字不被忽略..
作者:
标题: (已解决)此批处理如何实现输入中间带0的数字不被忽略.. 上一主题 | 下一主题
richercdw
初级用户





积分 62
发帖 32
注册 2006-11-8
状态 离线
『楼 主』:  (已解决)此批处理如何实现输入中间带0的数字不被忽略..

此批处理如何实现输入中间带0的数字不被忽略..

@echo off
set /p ip=请输入:
set ip=%ip:0=%
echo 结果:%ip%
pause

现在出现个问题。就是比如输入 10呀,101呀,108呀,那第二位的零都被忽略了。因为我要的结果是不管输入010还是10还是101。还是088。。输出结果为不带0头的数字就可以了。第二位。第三位可带零

[ Last edited by richercdw on 2007-6-29 at 05:53 PM ]



悠品网
2007-6-29 17:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:  

用sed命令结合正则表达式可以搞定
但纯P就不知道了
等待高人

2007-6-29 17:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
richercdw
初级用户





积分 62
发帖 32
注册 2006-11-8
状态 离线
『第 3 楼』:  

期待高人的出现。。。。



悠品网
2007-6-29 17:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 4 楼』:  

那只能先判断变量的第一位是否是0了。然后再替换

2007-6-29 17:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
richercdw
初级用户





积分 62
发帖 32
注册 2006-11-8
状态 离线
『第 5 楼』:  

嗯。那代码如何写哟。。。



悠品网
2007-6-29 17:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 6 楼』:  


@echo off
set /p ip=请输入:
if %ip:~0,1%==0 set ip=%ip:~1%
echo 结果:%ip%
pause
是这样吗?

2007-6-29 17:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 7 楼』:  

To:楼上,如果第二个数字还是为0呢?按照你这样写,那就要循环检测了。

这样的问题,其实早讨论过了!
去除开头、中间、末尾的0的
给一段利用了 3742 斑竹的代码吧:
@echo off

set /p input=请输入数字:

for /f "delims=0 tokens=*" %%i in ("%input%") do echo %%i

pause>nul
[ Last edited by youxi01 on 2007-6-29 at 05:49 PM ]

2007-6-29 17:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 8 楼』:  

防止有多个0
@echo off
set /p ip=请输入:
:p
if %ip:~0,1%==0 (set ip=%ip:~1% & goto p) else (goto out)
:out
echo 结果:%ip%
pause


2007-6-29 17:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
richercdw
初级用户





积分 62
发帖 32
注册 2006-11-8
状态 离线
『第 9 楼』:  

行了。谢谢各位高手了。。。



悠品网
2007-6-29 17:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 10 楼』:  

楼主的处理思路有问题

遇到用户输入的有前缀0的数字时
最好是直接提示无效数字
然后提示重新输入
而不是自作主张的去掉前缀0

除非有特别的需要才去兼容这个输入习惯

2007-6-29 18:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
richercdw
初级用户





积分 62
发帖 32
注册 2006-11-8
状态 离线
『第 11 楼』:  

10楼的。不是说我思路有问题。因为我是配置IP批处理中用到的。。

因为每个人的思路不一样。。有的喜欢输001这样的计算机名,有的喜欢输1这样的计算机名,这样就不统一了。所以要这个的批处理就是不管输入001还是1结果都是001

IP前头不能带零.所有只要求把前面的零给去掉..



悠品网
2007-6-29 21:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by wudixin96 at 2007-6-29 17:51:
防止有多个0
@echo off
set /p ip=请输入:
:p
if %ip:~0,1%==0 (set ip=%ip:~1% & goto p) else (goto out)
:out
echo 结果:%ip%
pause

罗嗦了,修改如下:
@echo off
set /p ip=请输入:
:loop
if "%ip:~0,1%" == "0" set ip=%ip:~1%&goto loop
echo 结果:%ip%
pause
&之前最好不要加空格,否则变量会带入空格

[ Last edited by zh159 on 2007-6-29 at 09:34 PM ]



2007-6-29 21:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 13 楼』:  

楼主

我就是因为看到变量名为IP
才想起这个问题的
我未见过任何人输入IP时喜欢加0前缀的
也许是我见到少吧

至于计算机名似乎与IP没有关系
但是你的思路显然是用计算机名设定IP地址
巧则巧矣
但带来的麻烦太多了

比如
我输入S001作为计算机名似乎没有问题
但是你的程序很可能不接受的我的输入
因为它要用计算机名组合IP地址
或许它会提示一个错误后终止
或许它会按照自己的意图修改一番
但很可能都已经走向了用户所料不到的方向

程序设计这个东西
还是应该简单些好
无法是从用户界面
还是从代码编写上

以上意见仅供参考

2007-6-29 22:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
richercdw
初级用户





积分 62
发帖 32
注册 2006-11-8
状态 离线
『第 14 楼』:  

我把代码编成一团了。现在成型是这样的。哈哈。乱了乱了。不过不管我怎么输入。都正确。请高看看哪有没有误。。

:OK
mode con cols=50 lines=15&color 2e
set aip=192.168.1.
set bip=192.168.2.
set cip=192.168.3.
set vip=192.168.4.
set mask=255.255.248.0
set gateway=192.168.4.254
set dns1=192.168.4.254
set dns2=61.130.254.34

:MENU
cls
echo.
echo.
echo            A区 请按 1
echo.
echo            B区 请按 2  
echo.
echo            C区 请按 3  
echo.
echo            V区 请按 4
echo.
echo.
echo.
:CHO
set /p key=           请输入您的选择(1,2,3,4):
if /i "%key%"=="1" goto A
if /i "%key%"=="2" goto B
if /i "%key%"=="3" goto C
if /i "%key%"=="4" goto V
echo.
echo            选择无效,请重新输入!...
echo.
goto cho

:A
cls
echo.
echo.
echo.
echo.
echo.
echo.        A区
echo.
set /p num=                    请输入计算机号:
echo.
if %num% GEQ 255 goto 255
:aa
if "%num:~0,1%" == "0" set num=%num:~1%&goto aa
set ip=%aip%%num%
set num=000%num%
set pcname=A%num:~-3%
cls
echo.
echo        计算机名:%pcname%  IP地址:%ip%
pause
reg add "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName" /v ComputerName /t reg_sz /d %pcname% /f >nul
reg add "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" /v ComputerName /t reg_sz /d %pcname% /f >nul
reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "NV Hostname" /t reg_sz /d %pcname% /f >nul
reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v Hostname /t reg_sz /d %pcname% /f >nul
reg add "HKLM\SYSTEM\CurrentControlSet\Services\NwlnkIpx\Parameters" /v VirtualNetworkNumber /t REG_DWORD /d 0x00000%IP:~10% /f >nul
netsh interface ip set address name="本地连接" source=static addr=%ip% mask=%mask% >nul
netsh interface ip set address name="本地连接" gateway=%gateway% gwmetric=0 >nul
netsh interface ip set dns name="本地连接" source=static addr=%DNS1% register=PRIMARY >nul
netsh interface ip add dns name="本地连接" addr=%DNS2% index=2 >nul
reg add "HKLM\Software\iCafe8" /v ServIP /t reg_sz /d 192.168.4.221 /f >nul
reg add "HKLM\Software\iCafe8" /v ServPort /t reg_dword /d 9910 /f >nul
sc config MSiSCSI start= auto >nul
goto fjwblm
:255
echo 大于255啦...重新输入一次哇...
goto MENU

后面的就复制了...太长了...



悠品网
2007-7-1 19:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: