中国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
银牌会员

天的白色影子


积分 2343
发帖 636
注册 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 楼』:  

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
银牌会员

天的白色影子


积分 2343
发帖 636
注册 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
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: