批处理之家's Archiver

youxi01 发表于 2008-1-3 22:24

批处理for命令应用入门与进阶训练(2011年8月3日更新)

[i=s] 本帖最后由 cjiabing 于 2011-9-25 23:56 编辑 [/i]

[size=4][b]第一套:[/b]
[/size][color=royalblue]为加快新手对for命令的入门,特编制本套"试题"(可以将答案作为回帖)
[/color]1、批处理运行窗口显示1~100 这100 个数字;
2、批处理运行窗口显示 1、3、5.....99这50个数字;

3、将 bbs bathome.net (在同一行)分成三行显示在批处理运行窗口;
4、先将以下内容保存到F:\test.txt[code]1      2        3
4      5        6
7      8        9[/code]①将f:\test.txt内容全部显示在批处理窗口;
②只显示 2      5        8显示在批处理窗口(分三行显示,每字一行)
————————————————————————————————————
[size=4][b]第二套:(2011年8月3日更新)[/b]
[/size][color=royalblue]目的:针对for命令的入门与进阶的配套练习,以掌握for命令的参数为主,兼以考察新手对FOR的综合应用和对FOR中的变量延迟的了解。[/color]
[color=royalblue]要求:回帖答案请注明是哪道题。不懂变量延迟和多层嵌套的可搜索论坛相关帖子。B7题可以选做,只是用来考察FOR思想。[/color]

[b]B1[/b]、[b]分行显示[/b]李白的古诗《静夜思》:“床前明月光   疑是地上霜   举头望明月   低头思故乡”
[b]B2[/b]、[b]搜索[/b]系统盘(如C:\)下包含字符“mplayer”的所有文件(系统播放器),并分别显示[u][b]路径名、文件名和后缀名[/b][/u]。
[b]B3[/b]、显示[b]递减数列[/b]:100、98、96、……、4、2、0,[b]并求和[/b]。
[b]B4[/b]、从句子中提取“[b]荡妇大游行[/b]”这个词:“穿了裙子,不等于说可以。”加拿大警察的“如果不想被强奸,就不要把自己打扮得像荡妇”言论引发了世界性的抗议。7月31日,继加拿大、美国、英国、澳大利亚、巴西、荷兰、韩国之后,印度新德里也举行了“荡妇大游行”。
[b]B5[/b]、由“ipconfig”命令获得网络配置信息,请[b]提取 IP 地址[/b]“192.168.1.100”。也可将以下内容保存为文本进行。
[code]
Ethernet adapter 本地连接:
        Connection-specific DNS Suffix  . :
        IP Address. . . . . . . . . . . . : 192.168.1.100
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 192.168.1.1
::由ipconfig命令获得以上网络配置信息,请提取 IP 地址。
[/code]
[b]B6[/b]、[b]提取指定行[/b]。系统播放器wmplayer目录中有一文本eula.txt(路径:C:\Program Files\Windows Media Player\eula.txt),其中有一段内容如下:
[code]13. LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES. You can recover from Microsoft and its suppliers only direct damages up to U.S. $5.00. You cannot recover any other damages, including consequential, lost profits, special, indirect or incidental damages.[/code]
请将以上这段内容提取出来。
如果找不到该文件,请在 C:\Program Files\ 目录下自己建一个,当然,文本内容至少应该有十行以上,并将这段内容放到文本中间。
[b]B7[/b]、【选做】有一文本123.txt,内容如下:
[code]
3
4
5
6
7
9
9
9
10
10
[/code]
请用批处理表示以上数字的关系:将类似“3、4、5、6、7”递增关系的数字组合设为“顺子”;将类似“9、9、9、10、10”由三个相同的数字与另外两个相同的数字组成的数字关系设为“三带二”。
可以用后面这组数字加以验证你的代码:3、3、4、4、4、5、6、7、7、7、7。

[b]提示:[/b]
[color=silver]B1:无参数的FOR的应用。[/color]
[color=silver]B2:FOR /R 与批处理参数的应用。[/color]
[color=silver]B3、FOR /L 的应用。[/color]
[color=silver]B4、FOR /F 的选项 Tokens和Delims的应用,FOR对列的处理。[/color]
[color=silver]B5、FOR /F 参数的综合应用。不限制思路,稍难。[/color]
[color=silver]B6、FOR /F 的选项Usebackq的应用,及FOR对行的提取。只能使用FOR解题,具体思路不限。[/color]
[color=silver]B7、FOR 与变量延迟。来自批处理斗地主游戏中对符合规则的牌的分析。较难,选做。[/color]
[b][color=dimgray]答案在19页271楼
[/color][/b]————————————————————————————————————
[b][size=4]第三套:拓展应用[/size][/b]
[b]C1、[/b]从下列命令行中提出路径“C:\WINDOWS\system32\cmd.exe”,不要双引号:
cmd /c ""C:\WINDOWS\system32\cmd.exe" /f"  280
[b]C2、[/b]显示10秒倒计时。这个在其他地方有了,可以不做。
C3、
编辑中,有空完善……
————————————————————————————————————
[size=4][color=red]要求:请用code标签把代码部分首尾括起来。[/color][/size]

Q: 如何用code把代码扩起来?
A: [url=http://bbs.bathome.net/thread-404-1-1.html]http://bbs.bathome.net/thread-404-1-1.html[/url]

参考:批处理之家论坛使用常见问题FAQ
[url=http://bbs.bathome.net/thread-3473-1-1.html]http://bbs.bathome.net/thread-3473-1-1.html[/url]
————————————————————————————————————
[size=4][color=red]参考内容:[/color][/size]
  [color=#0c00be][[/color][url=http://www.bathome.net/forumdisplay.php?fid=33&filter=type&typeid=1]原创[/url][color=#0c00be]][/color][url=http://www.bathome.net/thread-2189-1-1.html][系列教程]批处理for语句从入门到精通[20101225更新][/url]

awuxixi 发表于 2008-1-23 17:46

1、批处理运行窗口显示1~100 这100 个数字;[code]for /L %%i in (1,1,100) do echo %%i[/code]2、批处理运行窗口显示 1、3、5.....99这50个数字;[code]for /L %%i in (1,2,99) do echo %%i[/code]3、将 bbs bathome.net (在同一行)分成三行显示在批处理运行窗口;[code]@echo off
set var=bbs bathome.net
echo %var%
for /f "tokens=1 " %%a in ("%var%") do echo %%a
for /f "tokens=2 " %%b in ("%var%") do echo %%b
for /f "tokens=3 " %%c in ("%var%") do echo %%c
pause>nul[/code](我只能用三个for)

lixiaodaoaaa 发表于 2008-2-4 10:20

不错啊!

做的不错,我去试着运行,楼上水平不错,继续努力!!

youxi01 发表于 2008-2-8 14:30

回复 2# 的帖子

第三题,用三个for固然可以实现效果。
其实一个for就可以的了:[code]echo off
set var=bbs bathome.net
echo %var%
for  %%i in (%var%) do echo %%i
pause>nul[/code]

lixiaodaoaaa 发表于 2008-2-13 11:16

有点不明白啊?

[code]for /f "tokens=1 " %%a in ("%var%") do echo %%a
for /f "tokens=2 " %%b in ("%var%") do echo %%b
for /f "tokens=3 " %%c in ("%var%") do echo %%c[/code]这三行不明白,其他的都能看懂,麻烦解释一下了........
有点难啊!
楼上的运行出现找不到文件,错误希望改一下........
努力!!!

lixiaodaoaaa 发表于 2008-2-13 11:16

很不错

总体很不错,希望继续努力啊!!

hsyxh 发表于 2008-2-14 21:27

学习了,我也要继续努力。

ieutk 发表于 2008-3-1 13:41

4楼in后的集中少了双引号,所以就会出现找不到文件的错误

另外题目是这样的
[quote]将 bbs bathome.net (在同一行)分成三行显示在批处理运行窗口[/quote]

e119085072 发表于 2008-3-5 09:50

我什么都看不懂 怎么办

我一个都看不懂,要怎么办啊

wklxdmyl 发表于 2008-3-7 09:12

努力啊!!!!!!
可惜第三个没有做出来

scdengting 发表于 2008-3-10 09:42

谢谢各位高手,小弟学习了,谢谢

kennywah 发表于 2008-3-11 11:37

我也是一个都看不懂啊.............

pusofalse 发表于 2008-3-11 22:24

1[code]for /l %%i in (1 1 100) do @echo %%i[/code]2[code]for /l %%i in (1 2 100) do @echo %%i[/code]3[code]for %%i in (bbs bathome.net) do @echo %%i[/code]4[code]for /f "tokens=2" %%i in (f:\test.txt) do @echo %%i[/code]对否。。

CecleCW 发表于 2008-3-19 00:45

1、批处理运行窗口显示1~100 这100 个数字[code]for /l %%i in (1,1,100) do echo %%i[/code]2、批处理运行窗口显示 1、3、5.....99这50个数字;[code]for /l %%i in (1,2,100) do echo %%i[/code]3、将 bbs bathome.net (在同一行)分成三行显示在批处理运行窗口[code]@echo off
set txt=bbs bathome.net
for /f "tokens=1,2,3" %%i in ("%txt%") do set s1=%%i && set s2=%%j && set s3=%%k
echo %s1%
echo %s2%
echo %s3%
pause>nul[/code]4、
①将f:\test.txt内容全部显示在批处理窗口[code]@echo off
type test.txt[/code]或者[code]@echo off
for /f "tokens=1,2,3" %%i in (test.txt) do echo %%i %%j %%k
pause>nul[/code]②只显示 2      5        8显示在批处理窗口(分三行显示,每字一行)[code]@echo off
setlocal EnableDelayedExpansion
set index=0
for /f "tokens=2" %%i in (test.txt) do (
set /a index+=1
set str!index!=%%i
)
echo %str1%
echo %str2%
echo %str3%
pause>nul[/code]

angelbbaa 发表于 2008-3-25 13:38

第三题

[code]@echo off
for /f "tokens=1-3 delims=  " %%a in ("bbs bathome.net") do echo %%a%%b
pause>nul[/code]

more 发表于 2008-3-27 09:17

第三题:[code]@echo off
set var=bbs bathome.net
for /f "tokens=1-3 delims= " %%i in ("%var%") do (
echo %%i
echo %%j
echo %%k
)
echo.&pause[/code]

553850000 发表于 2008-3-29 21:03

等一题
@echo off
for /l %%a in (1,1,100) do @echo %%a
pause

第二题
@echo off
for /l %%a in (1,2,99) do @echo %%a
pause

第四题
@echo off
for /f "tokens=2 delims= " %%a in (test.txt) do @echo %%a
pause

easyguy 发表于 2008-4-3 13:37

很好,我支持这种方法来批处理,希望以后能多出些题目让新手来练习!!!!!!!

zhangxiaopeng 发表于 2008-4-4 15:01

第四题:
@echo off
type test.txt
for /f "tokens=2" %%i in (test.txt) do echo %%i
pause

sohu886 发表于 2008-4-9 13:46

第三题:
   @echo off
   set var=bbs bathome.net
   echo %var%
   for /f "tokens=1,2* delims= " %%a in ("%var%") do (
   echo %%a
   echo %%b
   echo %%c
   )
   pause>nul

苹果也学批 发表于 2008-4-9 22:09

这么难,唉,还不懂,学习去,

xiangzhili 发表于 2008-4-15 20:58

回贴

@echo off
for /L %%1 in (1,1,100) do echo %%1
for /L %%1 in (1,2,50)do echo %%1
pause>nul
第三个我不知道,不知道参数

xiaoxx 发表于 2008-4-28 09:03

@echo off
echo 在批处理窗口显示1-100数字
pause
for /l %%i in (1,1,100) do echo %%i
echo 在批处理窗口显示1,3,5...99等50个数字
pause
for /l %%j in (1,2,99) do echo %%j
pause
set var=bbs bathome.net
for %%k in (%var%) do echo %%k
pause
type F:\test.txt
pause
for /f "tokens=2" %%l in (F:\test.txt) do echo %%l
pause

yedashu 发表于 2008-5-8 13:34

刚学批处理,第三题参照4楼管理员改进了一下,可行,望指教

echo off
set var=bbs bathome.net
echo %var%
for /f "tokens=1,2,3" %%i in ("%var%") do echo %%i &echo %%j &echo %%k
pause>nul

yedashu 发表于 2008-5-8 13:50

关于第三题,for的带/f和不带两种用法都可以实现,有什么区别阿?

for /f "tokens=1,2,3" %%i in ("%var%") do echo %%i &echo%%j &echo%%k
for %%k in (%var%) do echo %%k

in里面除了参数处理不一样外,他们循环取字符串时的是怎么取的,有什么区别阿?

刚学批处理,有太多不懂,望高手指点,先谢谢了!

darkphx 发表于 2008-5-15 14:21

[quote]原帖由 [i]yedashu[/i] 于 2008-5-8 13:50 发表 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=4727&ptid=459][img]http://bbs.bathome.net/images/common/back.gif[/img][/url]
for /f "tokens=1,2,3" %%i in ("%var%") do echo %%i &echo%%j &echo%%k
for %%k in (%var%) do echo %%k

in里面除了参数处理不一样外,他们循环取字符串时的是怎么取的,有什么区别阿?

刚学批处理,有太多 ... [/quote]

由于楼上的启发
我想问一下
如果在 for /f "tokens=1,2,3" %%i in ("%var%") do echo %%i &echo%%j &echo%%k 中
我想要引入字串 "%var%"而不是变量var怎么办?
有可能吗
请指教

namejm 发表于 2008-5-15 16:39

  如果要引入字符串"%var%" 而不是变量var,那么,就需要用 %%var%% 来表示。

darkphx 发表于 2008-5-15 23:40

谢谢~~~~~:)

tangfu 发表于 2008-6-7 22:04

for /f "tokens=1,2,3" %%i in ("%var%") do echo %%i &echo%%j &echo%%k
for %%k in (%var%) do echo %%k
的区别到底是什么?

我用cmd的时候for %%k in (%var%) do echo %%k好像是直接循环字符串,/f是循环的文件内容,不知道这样理解对不对

null 发表于 2008-8-3 12:16

第一个:
for /l %%i in (1 1 100) do @echo %%i

第二个:
for /l %%i in (1 2 100) do @echo %%i

第三个问题我看得不是很明白

第四个:
for /f "tokens=2 delims= " %%i in (f:\test.txt) do @echo %%i

页: [1] 2 3 4 5 6 7 8 9 10

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.