![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-07 19:04 |
共 48,041 主题排行 / 350,128 发帖 / 今日 3 篇 / 48,252 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 新手之截取字符强化练习(并请高手指教一二) |
| 可打印版本 1,727 / 13 |
| 第1楼 bat-zw | 发表于 2008-03-08 21:32 |
| 金牌会员 发帖 1,276 积分 3,105 | |
新手之截取字符强化练习(并请高手指教一二) 受老大们的启发,写了个截取字符练习的P,代码如下,虽然不怎么样,但给新手们练习还是可以的,以求共同提高嘛!同时也请各位老大不吝赐教。复制以下代码保存为*.bat,双击运行即可。 @echo off&color 9f&mode con cols=90 lines=15&setlocal EnableDelayedExpansion :begin set tu=★★★★★★★★★★★★★★★■■■■■■■■■■■■■■■ cls&echo.&echo 原始图案为:%tu% echo.&echo 注意前面有15个五角星后面有15个方块,等下记得数一下哦! echo.&echo 为了方便重复练习没有设置退出,要退出请直接关闭窗口。&ping -n 4 127.1 >nul :choice cls&echo.&set /p select=请选择(默认回车为1)? (1.从前往后截取 2.从后向前截取) if "%select%"=="" goto choice1 if "%select%"=="1" goto choice1 if "%select%"=="2" goto choice3 if not "%select%"=="1" goto p if not "%select%"=="2" goto p :choice1 cls&echo.&set /p var1=请输入从前面第几位开始截取(请输入0~29内的数字,默认回车为1): if "%var1%"=="" set var1=1 if %var1% gtr 29 goto p1 :choice2 cls&echo.&set /p var2=请输入往后截取几位(请输入1~30内的数字,默认回车为1): if "%var2%"=="" set var2=1 if %var2% gtr 30 goto p2 if %var2% lss 1 goto p2 cls&echo.&echo 从第%var1%位向后截取%var2%位后的图案为: echo.&echo !tu:~%var1%,%var2%!&pause goto begin :choice3 cls&echo.&set /p var1=请输入丢弃后面几位(请输入0~29内的数字,默认回车为1): if "%var1%"=="" set var1=1 if %var1% gtr 29 goto p3 :choice4 cls&echo.&set /p var2=请输入从后向前截取几位(请输入1~30内并大于前面输入的数字,默认回车为30): if "%var2%"=="" set var2=30 if %var2% leq %var1% goto p4 if %var2% gtr 30 goto p4 if %var2% lss 1 goto p4 cls&echo.&echo 从后面向前截取%var2%位并丢弃后面%var1%位后的图案为: echo.&echo !tu:~-%var2%,-%var1%!&pause goto begin :p cls&echo.&echo 数字输入无效,请重新输入!&ping -n 2 127.1 >nul&cls&goto choice :p1 cls&echo.&echo 数字输入无效,请重新输入!&ping -n 2 127.1 >nul&cls&goto choice1 :p2 cls&echo.&echo 数字输入无效,请重新输入!&ping -n 2 127.1 >nul&cls&goto choice2 :p3 cls&echo.&echo 数字输入无效,请重新输入!&ping -n 2 127.1 >nul&cls&goto choice3 :p4 cls&echo.&echo 数字输入无效,请重新输入!&ping -n 2 127.1 >nul&cls&goto choice4 [ Last edited by zw19750516 on 2008-3-8 at 11:18 PM ] |
|
| 第2楼 plp626 | 发表于 2008-03-09 00:00 |
| 银牌会员 发帖 1,020 积分 2,278 | |
| 第3楼 bat-zw | 发表于 2008-03-09 00:25 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
非常感谢PLP626,为了共同提高的目的,在以上代码中再加入类似进度条的效果(加入了FOR命令),代码修改如下:
@echo off&color 9f&mode con cols=90 lines=15&setlocal EnableDelayedExpansion :begin set tu=★★★★★★★★★★★★★★★■■■■■■■■■■■■■■■ for /l %%a in (1,1,30) do ( call :delay %%a ) cls&echo.&echo 原始图案为:%tu% echo.&echo 注意前面有15个五角星后面有15个方块,等下记得数一下哦! echo.&echo 为了方便重复练习没有设置退出,要退出请直接关闭窗口。&ping -n 5 127.1 >nul :choice cls&echo.&set /p select=请选择(默认回车为1)? (1.从前往后截取 2.从后向前截取) if "%select%"=="" goto choice1 if "%select%"=="1" goto choice1 if "%select%"=="2" goto choice3 if not "%select%"=="1" goto p if not "%select%"=="2" goto p :choice1 cls&echo.&set /p var1=请输入从前面第几位开始截取(请输入0~29内的数字,默认回车为1): if "%var1%"=="" set var1=1 if %var1% gtr 29 goto p1 :choice2 cls&echo.&set /p var2=请输入往后截取几位(请输入1~30内的数字,默认回车为1): if "%var2%"=="" set var2=1 if %var2% gtr 30 goto p2 if %var2% lss 1 goto p2 cls&echo.&echo 从第%var1%位向后截取%var2%位后的图案为: echo.&echo !tu:~%var1%,%var2%!&pause goto begin :choice3 cls&echo.&set /p var1=请输入丢弃后面几位(请输入0~29内的数字,默认回车为1): if "%var1%"=="" set var1=1 if %var1% gtr 29 goto p3 :choice4 cls&echo.&set /p var2=请输入从后向前截取几位(请输入1~30内并大于前面输入的数字,默认回车为30): if "%var2%"=="" set var2=30 if %var2% leq %var1% goto p4 if %var2% gtr 30 goto p4 if %var2% lss 1 goto p4 cls&echo.&echo 从后面向前截取%var2%位并丢弃后面%var1%位后的图案为: echo.&echo !tu:~-%var2%,-%var1%!&pause goto begin :p cls&echo.&echo 数字输入无效,请重新输入!&ping -n 2 127.1 >nul&cls&goto choice :p1 cls&echo.&echo 数字输入无效,请重新输入!&ping -n 2 127.1 >nul&cls&goto choice1 :p2 cls&echo.&echo 数字输入无效,请重新输入!&ping -n 2 127.1 >nul&cls&goto choice2 :p3 cls&echo.&echo 数字输入无效,请重新输入!&ping -n 2 127.1 >nul&cls&goto choice3 :p4 cls&echo.&echo 数字输入无效,请重新输入!&ping -n 2 127.1 >nul&cls&goto choice4 :delay cls&echo.&echo 原始图案为:!tu:~0,%1!&ping -n 1 127.1 >nul&cls goto :eof |
|
| 第4楼 bat-zw | 发表于 2008-03-09 01:00 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
再次修改(汗!!!),目的是使之更直观,我己测试N次,请大家再帮测试哈了,先谢过了哈。
修改后的代码如下(把本来颠倒次序的输入改正了使之更合常理,同时加入了截取命令对照): @echo off&color 9f&mode con cols=90 lines=15&setlocal EnableDelayedExpansion :begin set tu=★★★★★★★★★★★★★★★■■■■■■■■■■■■■■■ for /l %%a in (1,1,30) do ( call :delay %%a ) cls&echo.&echo 原始图案为:%tu% echo.&echo 注意前面有15个五角星后面有15个方块,等下记得数一下哦! echo.&echo 为了方便重复练习没有设置退出,要退出请直接关闭窗口。&ping -n 4 127.1 >nul :choice cls&echo.&set /p select=请选择(默认回车为1)? (1.从前往后截取 2.从后向前截取) if "%select%"=="" goto choice1 if "%select%"=="1" goto choice1 if "%select%"=="2" goto choice3 if not "%select%"=="1" goto p if not "%select%"=="2" goto p :choice1 cls&echo.&set /p var1=请输入从前面第几位开始截取(请输入0~29内的数字,默认回车为1): if "%var1%"=="" set var1=1 if %var1% gtr 29 goto p1 :choice2 cls&echo.&set /p var2=请输入往后截取几位(请输入1~30内的数字,默认回车为1): if "%var2%"=="" set var2=1 if %var2% gtr 30 goto p2 if %var2% lss 1 goto p2 cls&echo.&echo 通过你的输入生成字符截取命令为:%%tu:~%var1%,%var2%%% echo.&echo 从第%var1%位向后截取%var2%位后的图案为: echo.&echo !tu:~%var1%,%var2%!&pause goto begin :choice3 cls&echo.&set /p var1=请输入从后向前截取几位(请输入1~30内的数字,默认回车为30): if "%var1%"=="" set var1=30 if %var1% gtr 30 goto p3 if %var1% lss 1 goto p3 :choice4 cls&echo.&set /p var2=请输入丢弃后面几位(请输入0~29内并小于前面输入的数字,默认回车为1): if "%var2%"=="" set var2=1 if %var2% gtr %var1% goto p4 if %var2% gtr 29 goto p4 cls&echo.&echo 通过你的输入生成字符截取命令为:%%tu:~-%var1%,-%var2%%% echo.&echo 从后面向前截取%var1%位并丢弃后面%var2%位后的图案为: echo.&echo !tu:~-%var1%,-%var2%!&pause goto begin :p cls&echo.&echo 数字输入无效,请重新输入!&ping -n 2 127.1 >nul&cls&goto choice :p1 cls&echo.&echo 数字输入无效,请重新输入!&ping -n 2 127.1 >nul&cls&goto choice1 :p2 cls&echo.&echo 数字输入无效,请重新输入!&ping -n 2 127.1 >nul&cls&goto choice2 :p3 cls&echo.&echo 数字输入无效,请重新输入!&ping -n 2 127.1 >nul&cls&goto choice3 :p4 cls&echo.&echo 数字输入无效,请重新输入!&ping -n 2 127.1 >nul&cls&goto choice4 :delay cls&echo.&echo 原始图案为:!tu:~0,%1!&ping -n 1 127.1 >nul&cls goto :eof |
|
| 第5楼 plp626 | 发表于 2008-03-09 01:02 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
不提倡批处理来做人机"对话"的事,我只让它传递命令给计算机,没有它给我发命令的事. 这才是 "轻轻一点,一切搞定"
微软不是在xp中就把choice给取了吗? |
|
| 第6楼 bat-zw | 发表于 2008-03-09 01:10 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
PLP626兄弟,我也不提倡这样,但新手就是要手脑并用才学得多学得扎实啊,你说是不是的。我开始对这个字符截取也不太明白,硬是自己多看多练多想才搞清楚的!世上无难事,只怕有心人啊。
|
|
| 第7楼 bat-zw | 发表于 2008-03-09 01:20 |
| 金牌会员 发帖 1,276 积分 3,105 | |
Originally posted by plp626 at 2008-3-9 01:02: 我的P中的choice并不是命令,而是标签,只是自己喜欢这个词,本来这个练手P中就有大量的人工选择输入的地方,所以我用了“chioce”。 |
|
| 第8楼 plp626 | 发表于 2008-03-09 01:32 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
这么晚了怎么还不睡?
|
|
| 第9楼 faultcode | 发表于 2008-03-09 16:19 |
| 初级用户 发帖 60 积分 120 | |
|
同意php626兄的话
还是用高级语言来实现GUI吧 |
|
| 第10楼 bat-zw | 发表于 2008-03-10 12:12 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
我说了这只是个为了让新手直观地练习截取字符的P啊,出发点是在于方便新人。
|
|
| 第11楼 HAT | 发表于 2008-03-10 13:42 |
| 版主 发帖 5,017 积分 9,023 | |
| 第12楼 bat-zw | 发表于 2008-03-10 14:21 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
我也看过这个P,也是受之启发才写的上面的P,主要是让新人动脑的同时还动动手,在动手的时候能更好的理解所学的东西。
|
|
| 第13楼 zwlrr156 | 发表于 2008-03-17 21:45 |
| 新手上路 发帖 8 积分 16 | |
|
实在是很佩服LZ啊
LZ的dos时钟我一直在用 呵呵 |
|
| 第14楼 nipo | 发表于 2008-04-27 03:24 |
| 中级用户 发帖 106 积分 228 | |
|
谢谢楼主的作品,下来好好学习一下。
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |