Board logo

标题: (已解决)此批处理如何实现输入中间带0的数字不被忽略.. [打印本页]

作者: richercdw     时间: 2007-6-29 17:27    标题: (已解决)此批处理如何实现输入中间带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 ]
作者: HAT     时间: 2007-6-29 17:32
用sed命令结合正则表达式可以搞定
但纯P就不知道了
等待高人
作者: richercdw     时间: 2007-6-29 17:33
期待高人的出现。。。。
作者: wudixin96     时间: 2007-6-29 17:34
那只能先判断变量的第一位是否是0了。然后再替换
作者: richercdw     时间: 2007-6-29 17:36
嗯。那代码如何写哟。。。
作者: wudixin96     时间: 2007-6-29 17:47

@echo off
set /p ip=请输入:
if %ip:~0,1%==0 set ip=%ip:~1%
echo 结果:%ip%
pause
是这样吗?
作者: youxi01     时间: 2007-6-29 17:48
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 ]
作者: wudixin96     时间: 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

作者: richercdw     时间: 2007-6-29 17:52
行了。谢谢各位高手了。。。
作者: qzwqzw     时间: 2007-6-29 18:58
楼主的处理思路有问题

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

除非有特别的需要才去兼容这个输入习惯
作者: richercdw     时间: 2007-6-29 21:00
10楼的。不是说我思路有问题。因为我是配置IP批处理中用到的。。

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

IP前头不能带零.所有只要求把前面的零给去掉..
作者: zh159     时间: 2007-6-29 21:33


  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 ]
作者: qzwqzw     时间: 2007-6-29 22:00
楼主

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

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

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

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

以上意见仅供参考
作者: richercdw     时间: 2007-7-1 19:39
我把代码编成一团了。现在成型是这样的。哈哈。乱了乱了。不过不管我怎么输入。都正确。请高看看哪有没有误。。

: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

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