|  | 
 
| bat-zw 金牌会员
 
       永远的学习者
 
 
 积分 3105
 发帖 1276
 注册 2008-3-8
 状态 离线
 | 
| 『楼 主』:
 新手之截取字符强化练习(并请高手指教一二)
 
使用 LLM 解释/回答一下 
 
 
<img src="images/smilies/face-wink.png" align="absmiddle" border="0">受老大们的启发,写了个截取字符练习的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 ]
 
 
 
 
 |  | 
|  2008-3-8 21:32 |  | 
|  | 
 
| plp626 银牌会员
 
      钻石会员
 
 
 积分 2278
 发帖 1020
 注册 2007-11-19
 状态 离线
 |  | 
|  2008-3-9 00:00 |  | 
|  | 
 
| bat-zw 金牌会员
 
       永远的学习者
 
 
 积分 3105
 发帖 1276
 注册 2008-3-8
 状态 离线
 | 
| 『第 3 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
非常感谢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
 
 
 
 
 |  | 
|  2008-3-9 00:25 |  | 
|  | 
 
| bat-zw 金牌会员
 
       永远的学习者
 
 
 积分 3105
 发帖 1276
 注册 2008-3-8
 状态 离线
 | 
| 『第 4 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
再次修改(汗!!!),目的是使之更直观,我己测试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
 
 
 
 
 |  | 
|  2008-3-9 01:00 |  | 
|  | 
 
| plp626 银牌会员
 
      钻石会员
 
 
 积分 2278
 发帖 1020
 注册 2007-11-19
 状态 离线
 |  | 
|  2008-3-9 01:02 |  | 
|  | 
 
| bat-zw 金牌会员
 
       永远的学习者
 
 
 积分 3105
 发帖 1276
 注册 2008-3-8
 状态 离线
 | 
| 『第 6 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
PLP626兄弟,我也不提倡这样,但新手就是要手脑并用才学得多学得扎实啊,你说是不是的。我开始对这个字符截取也不太明白,硬是自己多看多练多想才搞清楚的!世上无难事,只怕有心人啊。 
 
 
 
 |  | 
|  2008-3-9 01:10 |  | 
|  | 
 
| bat-zw 金牌会员
 
       永远的学习者
 
 
 积分 3105
 发帖 1276
 注册 2008-3-8
 状态 离线
 | 
| 『第 7 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
Originally posted by plp626 at 2008-3-9 01:02:不提倡批处理来做人机"对话"的事,我只让它传递命令给计算机,没有它给我发命令的事.  这才是 "轻轻一点,一切搞定"
 微软不是在xp中就把choice给取了吗?
 
我的P中的choice并不是命令,而是标签,只是自己喜欢这个词,本来这个练手P中就有大量的人工选择输入的地方,所以我用了“chioce”。 
 
 
 
 |  | 
|  2008-3-9 01:20 |  | 
|  | 
 
| plp626 银牌会员
 
      钻石会员
 
 
 积分 2278
 发帖 1020
 注册 2007-11-19
 状态 离线
 |  | 
|  2008-3-9 01:32 |  | 
|  | 
 
| faultcode 初级用户
 
   
 
 
 
 积分 120
 发帖 60
 注册 2007-10-26
 状态 离线
 |  | 
|  2008-3-9 16:19 |  | 
|  | 
 
| bat-zw 金牌会员
 
       永远的学习者
 
 
 积分 3105
 发帖 1276
 注册 2008-3-8
 状态 离线
 |  | 
|  2008-3-10 12:12 |  | 
|  | 
 
| HAT 版主
 
         
 
 
 
 积分 9023
 发帖 5017
 注册 2007-5-31
 状态 离线
 |  | 
|  2008-3-10 13:42 |  | 
|  | 
 
| bat-zw 金牌会员
 
       永远的学习者
 
 
 积分 3105
 发帖 1276
 注册 2008-3-8
 状态 离线
 | 
| 『第 12 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
  我也看过这个P,也是受之启发才写的上面的P,主要是让新人动脑的同时还动动手,在动手的时候能更好的理解所学的东西。 
 
 
 
 |  | 
|  2008-3-10 14:21 |  | 
|  | 
 
| zwlrr156 新手上路
 
  
 
 
 
 积分 16
 发帖 8
 注册 2007-9-25
 状态 离线
 |  | 
|  2008-3-17 21:45 |  | 
|  | 
 
| nipo 中级用户
 
    
 
 
 
 积分 228
 发帖 106
 注册 2008-4-26
 状态 离线
 |  | 
|  2008-4-27 03:24 |  |