标题: 批处理显示输入的两个字母中的所有字母 [打印本页]
作者: 随风 时间: 2008-1-3 23:39 标题: 批处理显示输入的两个字母中的所有字母
新手晋级练习题 1
要求:
输入任意两个字母,显示这两个字母中间的所有字母。
如: 输入 af 则显示英文字母a至f 如: a b c d e f
[ 本帖最后由 随风 于 2008-1-3 23:52 编辑 ]
作者: 随风 时间: 2008-1-8 15:57
:- @echo off
- echo 请按先后顺序输入两个字母 如:af ,不能输入 fa
- set /p input=
- cls
- for %%b in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
- if /i "%input:~0,1%"=="%%b" set ok=ok
- if /i "%input:~1,1%"=="%%b" set ok=&echo %%b
- if defined ok echo %%b
- )
- echo.&pause&exit
复制代码
作者: 浅默 时间: 2008-1-19 04:26
- @echo off
- setlocal enabledelayedexpansion
- :ke
- cls
- set /p zhen= 请按先后顺序输入两个不相邻的字母(如输入多于两个则只取前两个,^
- 如先后顺序颠倒或输入了相邻的字母请重新输入)
- set zhen=%zhen:~0,2%
- if %zhen:~0,1% geq %zhen:~1,1% goto ke
- cls
- for %%b in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
- set /a wang+=1
- set %%b=!wang!
- if %%b gtr %zhen:~0,1% if %%b lss %zhen:~1,1% echo %%b
- )
- set /a lu=!%zhen:~1,1%!-!%zhen:~0,1%!
- if %lu%==1 goto ke
- pause>nul
复制代码
作者: myweb9169 时间: 2008-1-21 19:58
@echo off
setlocal enabledelayedexpansion
:ke
cls
set /p zhen= 请按先后顺序输入两个不相邻的字母(如输入多于两个则只取前两个,^
如先后顺序颠倒或输入了相邻的字母请重新输入)
set zhen=%zhen:~0,2%
if %zhen:~0,1% geq %zhen:~1,1% goto ke
cls
for %%b in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
set /a wang+=1
set %%b=!wang!
if %%b gtr %zhen:~0,1% if %%b lss %zhen:~1,1% echo %%b
)
set /a lu=!%zhen:~1,1%!-!%zhen:~0,1%!
if %lu%==1 goto ke
pause>nul
=============================================================
这里的set /a wang+=1
set %%b=!wang!
起得是什么作用,把数值赋给 %%b,但我把@echo off去掉,查看这两句好像和整个代码没什么关系,但去掉他们有不能运行,感觉能用别的语句代替,可又不会,浅默能给解释一下吗,谢谢
[ 本帖最后由 myweb9169 于 2008-1-21 20:00 编辑 ]
作者: somebody 时间: 2008-1-22 22:21
练功..?
练什么吖``都没人回,哪知道练得如何...
作者: 浅默 时间: 2008-1-24 05:11
你好4楼的朋友,"set /a wang+=1" " set %%b=!wang!"这两句是为下面的 "set /a lu=!%zhen:~1,1%!-!%zhen:~0,1%!" 和 "if %lu%==1 goto ke" 这两句服务的。是为了排除相邻的字母。如:输入a和b两个字母时。在" set %%b=!wang!"时变成 a=1 ;b=2.下面的"set /a lu=!%zhen:~1,1%!-!%zhen:~0,1%!" 就变成了set /a lu=!b!-!a!然后变成set /a lu=2-1再后面的
"if %lu%==1 goto ke" 判断出lu=1就跳转到标签:ke.
[ 本帖最后由 浅默 于 2008-1-25 17:33 编辑 ]
作者: myweb9169 时间: 2008-1-24 21:57
谢谢浅默的解答,思维很清楚,明白了,又学到东西了,呵呵
作者: 梦想种子 时间: 2008-3-29 20:24
前辈们的身影,看起来都很熟悉。
晚辈就算模仿一下吧,- @echo off
- setlocal enabledelayedexpansion
- for %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
- set /a count+=1
- set %%i=!count!
- set !count!=%%i
- )
- set /p input=输入两个顺序字母:
- cls
- for /l %%i in (!%input:~0,1%!,1,!%input:~1,1%!) do echo !%%i!
- pause>nul
复制代码
作者: 553850000 时间: 2008-3-29 20:49
看不懂啊55555555555
作者: wuwenping 时间: 2008-4-22 14:49
@echo off
setlocal enabledelayedexpansion
:ke
cls
set /p zhen= 请按先后顺序输入两个不相邻的字母(如输入多于两个则只取前两个,^
如先后顺序颠倒或输入了相邻的字母请重新输入)
set zhen=%zhen:~0,2%
if %zhen:~0,1% geq %zhen:~1,1% goto ke
cls
for %%b in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
set /a wang+=1
set %%b=!wang!
if %%b gtr %zhen:~0,1% if %%b lss %zhen:~1,1% echo %%b
)
set /a lu=!%zhen:~1,1%!-!%zhen:~0,1%!
if %lu%==1 goto ke
pause>nul
=======================================================================
对不起大哥
能不能上面的程序一句一句的用中文翻译一下啊
我是 超级菜鸟啊!!
作者: wuwenping 时间: 2008-4-22 15:04
@echo off
setlocal enabledelayedexpansion
for %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
set /a count+=1
set %%i=!count!
set !count!=%%i
)
set /p input=输入两个顺序字母:
cls
for /l %%i in (!%input:~0,1%!,1,!%input:~1,1%!) do echo !%%i!
pause>nul
=======================================================================
梦想种子大哥
set !count!=%%i是什么意思
作者: 梦想种子 时间: 2008-4-23 20:08 标题: 回复 11楼 的帖子
set %%i=!count!
set !count!=%%i
这里是把数字和字母之间联系起来,建立等价关系。
就是提到1就会显示A,提到A就会显示1.
作者: xiaoxx 时间: 2008-4-27 18:20
学习了,顶一下。
作者: xiaoxx 时间: 2008-4-27 18:28
不知道在DOS中咋取得某个字符的ASCII码值
要是能取得,那么用/a表达式也许也是不错的主意.
作者: lhjoanna 时间: 2008-10-31 10:02
怎么没人讨论楼主的代码啊,我觉得还是随风写的代码好点,简洁又有效率
作者: keen 时间: 2009-4-5 14:00
随风的代码,非常好!学习……
作者: cainiao736 时间: 2009-4-6 16:24
- @echo off&setlocal enabledelayedexpansion
- set /p var=请按字母先后顺序输入两个字母:
- set var1=%var:~0,1%
- set var2=%var:~-1,1%
- set str=a b c d e f g h i j k l m n o p q r s t u v w x y z
- set count=1
- :begin
- for /f "tokens=%count%" %%i in ("!str!") do (
- set /a count+=1
- if %%i==!var1! set count1=!count!
- if %%i==!var2! set /a count2=!count!-2
- goto begin )
- echo %count1% %count2%
- set /a a=2*(count1-1)
- set /a b=2*(count2-count1+1)
- echo %a% %b%
- set str1=!str:~%a%,%b%!
- echo %str1%
- pause
复制代码
虽然很麻烦,但是结果还是正确的...
作者: energy2009 时间: 2009-4-6 21:35 标题: 回复 17楼 的帖子
大家都写的比较好。
我是新来的,看了几天论坛。
发现如 set var=!str:%%a=! 或者var1=%var:~0,1%,var2=%var:~-1,1%。等语句在很多地方都出现过。
不知道在这个赋值语句中后面的“:”或者“:~0,1”“:~-1,1”到底表示的什么意思。
希望前辈指点,谢谢!
作者: Batcher 时间: 2009-4-6 21:43 标题: 回复 18楼 的帖子
set截取字符详解
http://bbs.bathome.net/viewthread.php?tid=996
set变量字符截取点点通
http://bbs.bathome.net/viewthread.php?tid=40
新手set截取字符练习工具
http://bbs.bathome.net/viewthread.php?tid=1149
作者: rat 时间: 2009-4-6 23:03
- @set/ps=Plz input:&(call echo e102 '%%s%%'&more /e +1 "%~f0")|debug|findstr "^[^I\-0P]"&pause>nul&exit/b
- a100
- jmp 104
-
- a104
- MOV BL,[0103]
- MOV AL,[0102]
- SUB BL,AL
- LEA CX,[BX+01]
- MOV AH,02
- MOV DL,[0102]
- INT 21
- INC DL
- LOOP 0116
- INT 20
-
- g
- q
复制代码
作者: energy2009 时间: 2009-4-8 20:46
看了两天终于吧这个帖子的代码都读懂了,确实写的不错。
呵呵!谢谢版主的耐心解答!
作者: sjzong 时间: 2009-4-25 00:23 标题: 我也来试试
思路:先截取第二个字母前的字符串(包括该字母),然后把第一个字母前的字符串(包括这个字母)删除,最后补上第一个字母即可- @echo off
- setlocal enabledelayedexpansion
- set "str= abcdefghijklmnopqrstuvwxyz"
- set/p input=请按先后顺序输入两个字母(如 af ,不能输入 fa):
- cls
- set/a n=0
- :a
- if not "%input:~1,1%"=="!str:~%n%,1!" (set/a n+=1&goto :a)
- set str=!str:~1,%n%!
- set str=!str:*%input:~0,1%=!
- echo %input:~0,1%!str!
- echo.&pause
复制代码
[ 本帖最后由 sjzong 于 2009-4-25 00:32 编辑 ]
作者: swungod 时间: 2009-4-27 15:56
学习学习!!!暂时!不会!
作者: yangyuankui 时间: 2009-5-1 16:07
@echo off
echo 请按先后顺序输入两个字母 如:af ,不能输入 fa
set /p input=
cls
for %%b in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
if /i "%input:~0,1%"=="%%b" set ok=ok
if /i "%input:~1,1%"=="%%b" set ok=&echo %%b
if defined ok echo %%b
)
echo.&pause&exit
set ok=ok和set ok=&echo %%b
能帮忙解释 随风
[ 本帖最后由 yangyuankui 于 2009-5-1 16:09 编辑 ]
作者: Batcher 时间: 2009-5-1 16:46 标题: 回复 24楼 的帖子
自己单步运行一下,看看过程,思考一下。- echo 请按先后顺序输入两个字母 如:af ,不能输入 fa
- set /p input=
- cls
- for %%b in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
- if /i "%input:~0,1%"=="%%b" set ok=ok
- if /i "%input:~1,1%"=="%%b" set ok=&echo %%b
- if defined ok echo %%b
- pause
- )
- echo.&pause
复制代码
作者: keiamy 时间: 2015-7-27 16:04
參考以上前輩做的- @echo off&setlocal enabledelayedexpansion
- set /p var=Input Alphabet:
- set n=-2
- set "str=a b c d e f g h i j k l m n o p q r s t u v w x y z"
- for %%i in (%str%) do (
- set /a n+=2
- set %%i=!n!)
- set "star=%var:~,1%"
- set "end=%var:~-1%"
- set /a end1=!%end%!-!%star%!+1
- call echo %%str:~!%star%!,%end1%%%
- pause
复制代码
作者: dizimotong 时间: 2015-7-28 13:56
- @echo off&setlocal enabledelayedexpansion
-
- set char=abcdefghijklmnopqrstuvwxyz
- set /p str= "请输入英文字母:"
- set c1=%str:~0,1%
- set c2=%str:~1,1%
-
- for /l %%a in (0,1,25) do (
- set c3=!char:~%%a,1!
- if !c1!==!c3! set start=""
- if defined start set /p= !c3! <nul
- if !c2!==!c3! goto end
-
- )
-
- :end
- pause
复制代码
作者: 尘丶 时间: 2015-8-8 11:13
- @echo off&setlocal enabledelayedexpansion
- set "str=a b c d e f g h i j k l m n o p q r s t u v w x y z"
- set /p zimu=输入两个字母
- for %%a in (%str%) do (
- if not %%a==%zimu:~1% (echo;%%a) else (echo;%%a&pause&exit)
- )
- pause
复制代码
- @echo off&setlocal enabledelayedexpansion
- set n=
- set /p zimu=输入任意两个字母:
- set zimu1=%zimu:~,1%
- set zimu2=%zimu:~1%
- for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
- if %%a==%zimu1% set n=dui
- if !n!==dui echo;%%a
- if %%a==%zimu2% set n=cuo
- )
复制代码
pause&exit
作者: wutarnow 时间: 2015-10-20 14:09
本帖最后由 wutarnow 于 2015-10-20 15:00 编辑
- @echo off
- setlocal enabledelayedexpansion
- set /p ch=按字母顺序输入两个字母:
- set result=这两个字母中间是:
- set table=a b c d e f g h i j k o m n o p q r s t u v w x y z
- for %%I in (%table%) do (
- if /i %%I GTR %ch:~1,1% goto Finish
- if /i %%I GEQ %ch:~,1% set result=!result! %%I
- )
- :Finish
- echo %result%
复制代码
作者: taofan712 时间: 2017-2-23 14:41
各位前辈都没有用到delims=,我也来交个答案。- @echo off
- set "var=abcdefghijklmnopqrstuvwxyz"
- set /p input=请按先后顺序输入两个字母(如 af ,不能输入 fa):
- for /f "tokens=2 delims=%input:~0,1%%input:~1,1%" %%a in ("%var%") do echo;%%a&pause>nul
复制代码
作者: 懒虫阿布 时间: 2018-7-27 23:13
贴个笨方法,但是顺序不受限制- @echo off
- setlocal enabledelayedexpansion
-
- set letterstr=a b c d e f g h i j k l m n o p q r s t u v w x y z
- echo 请按先后顺序输入两个字母 如:af
- set /p input=
- set index=0
-
- for %%i in (%letterstr%) do (
- if /i "%%i"=="%input:~0,1%" (
- set start=!index!
- )
- if /i "%%i"=="%input:~1,1%" (
- set end=!index!
- )
- set /a index+=2
- )
-
- echo !start!-!end!
- if !end! lss !start! (
- set /a len=!start!-!end!+1
- set start=!end!
- ) else (
- set /a len=!end!-!start!+1
- )
-
- call echo %%letterstr:~!start!,!len!%%
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |