找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: namejm

批处理for语句从入门到精通配套练习题

[复制链接]
发表于 2009-6-23 11:03:57 | 显示全部楼层
A1:
@echo off
set str=I love,bbs;bathome.net
for %%i in(%str%) do echo %%i
pause
A2:
@echo off
set str=I love,bbs;bathome.net
for %%i in(%str%) do if %%i==cn :echo %%i:
pause

我是新手弄错了别骂,谢谢,请多指教
发表于 2009-6-27 10:47:56 | 显示全部楼层

  1. ::A1:假设令 set str=I love,bbs;bathome.net,请分别显示出I、love、bbs、bathome和cn这五个字符串。目的:了解for语句用到了哪些符号作为元素的分隔符。
  2. @echo off
  3. (
  4.     for /f "tokens=1,2,3,4,5 delims=,;= " %%a in ("I love,bbs;bathome.net") do (
  5.     echo;%%a
  6.     echo;%%b
  7.     echo;%%c
  8.     echo;%%d
  9.     echo;%%e
  10.     )
  11. )
  12. pause
  13. ::A2:条件同A1,要求最后只显示cn这个字符串。目的:了解for语句的执行流程。
  14. @echo off
  15. (
  16.     for /f "tokens=1,2,3,4,5 delims=,;= " %%a in ("I love,bbs;bathome.net") do (
  17.     echo;%%e
  18.     )
  19. )
  20. pause
复制代码

评分

参与人数 1PB +2 收起 理由
wxcute + 2 不错。但复杂了,了解一下默认分隔符将对你 ...

查看全部评分

发表于 2009-7-6 17:07:56 | 显示全部楼层
 A1:假设令 set str=I love,bbs;bathome.net,请分别显示出I、love、bbs、bathome和cn这五个字符串。目的:了解for语句用到了哪些符号作为元素的分隔符。

  A2:条件同A1,要求最后只显示cn这个字符串。目的:了解for语句的执行流程。

第一题:
@echo off
set str=I love,bbs;bathome.net
for %%i in ("%str%") do set  a=%i:I%
echo %a%
for %%i in ("%str%") do set  b=%str:~2,4%
echo %b%
for %%i in ("%str%") do set  c=%i:bbs%
echo %c%
for %%i in ("%str%") do set  d=%i:bathome%
echo %d%
for %%i in ("%str%") do set  e=%str:~-2%

echo %e%

pause

set str=I love,bbs;bathome.net
for /f "todens=1,2,3,4,5 delims=,;= " %%i in ("%str%") do (
echo %%i
echo %%j
echo %%k
echo %%l
echo %%m
)
pause


第二种解法:

set str=I love,bbs;bathome.net
for /f "delims= " %%i in ("%str%") do echo %%i
for /f "tokens=1 delims=," %%i in ("%str%") do for /f "tokens=2 delims= " %%j in ("%%i") do echo %%j
for /f "tokens=2 delims=," %%i in ("%str%") do for /f "delims=;" %%j in ("%%i") do echo %%j
for /f "tokens=2 delims=;" %%i in ("%str%") do for /f "tokens=1 delims==" %%j in ("%%i") do echo %%j
for /f "tokens=2 delims==" %%i in ("%str%") do echo %%i
pause

评分

参与人数 1PB +1 收起 理由
wxcute + 1 复杂了,认识一下默认分隔符,还有灵活运用 ...

查看全部评分

发表于 2009-7-6 17:12:52 | 显示全部楼层
for /f "tokens=1,2,3,4,5 delims=,;= " %%a in ("I love,bbs;bathome.net") do (
    echo %%a & echo %%b & echo %%c & echo %%d & echo %%e
发表于 2009-7-6 19:10:45 | 显示全部楼层

回复 65楼 的帖子

你的代码有错误,你在写好代码后,都不测试一下吗?
发表于 2009-7-6 23:23:02 | 显示全部楼层
不好意思,我测试后可能粘贴的时候贴少
新手,多多指教
发表于 2009-7-9 02:24:09 | 显示全部楼层

标准答案

A1:
@echo off
set str=I love,bbs;bathome.net
for %%i in (%str%) do echo %%i
pause>nul
A2:
@echo off
set str=I love,bbs;bathome.net
for %%i in (%str%) do set str=%%i
echo %str%
pause>nul
发表于 2009-7-12 14:51:49 | 显示全部楼层
A1:
  1. @echo off
  2. set str=i love,bbs;bathome.net,
  3. for %%i in (%str%) do echo %%i
  4. pause>nul
复制代码
A2:
  1. @echo off
  2. set str=i love,bbs;bathome.net,
  3. for %%i in (%str%) do if "%%i"=="cn" echo %%i
  4. pause>nul
复制代码
发表于 2009-7-12 15:07:06 | 显示全部楼层

回复 62楼 的帖子

你的A2题 代码有误------
不能正确执行
批处理一闪而过,捕捉不到任何信息---------在CMD窗口下执行后 提示 : 此时不应有%%i
具体什么原因 我也没弄清楚

[ 本帖最后由 vsbat 于 2009-7-12 15:10 编辑 ]
发表于 2009-7-12 17:04:38 | 显示全部楼层

回复 70楼 的帖子

你的代码跟他的基本一样,难道你自己没看出他的那儿跟你的不一样嘛?

62楼的代码在最后显示的时候在echo前面加了个冒号,导致一闪而过。
发表于 2009-7-16 02:40:46 | 显示全部楼层
原A1题
@echo off
set str=I love,bbs;bathome.net
for %%a in (%str:~7%) do echo %%a
pause

现A1题
@echo off
set str=I love,bbs;bathome.net
for %%a in (%str%) do echo %%a
pause

测试OK

A2题
@echo off
set str=I love,bbs;bathome.net
for %%a in (%str:~-2%) do echo %%a
pause


学习过程中有很多以为,楼主可以告诉个Q吗?
发表于 2009-7-16 02:55:31 | 显示全部楼层

回复 70楼 的帖子

原因是他的命令里多了几个:  导致严重语法错误。所以黑光一闪而过。无法运行

至于在dos下为什么显示 此时不应有%%
因为在dos参数不使用%% 而是单%
发表于 2009-7-16 03:00:48 | 显示全部楼层
我想楼主的主要意思是让我们明白
for命令的运行机理。是一个一个来的……。
@echo off
set str=I love,bbs;bathome.net
for %%a in %str% echo %%a
pause
第三行中,str=I love,bbs;batehome=cn
由于for命令默认分隔,因此实际上命令运行时是  
for %%a in I echo %%a
for %%a in love echo %%a
for %%a in bbs echo %%a
for %%a in bathome echo %%a
for %%a in cn echo %%a
这五句。
理解这一点,题目就好做了
发表于 2009-7-16 14:29:42 | 显示全部楼层
看一下了。到底是什么东西了
发表于 2009-7-16 15:15:07 | 显示全部楼层

请楼主审批……

@echo off
set str=I love,bbs;bathome.net
for %%a in (%str%) do echo %%a
echo 默认用(空格,逗号,分号,等号)作为元素分隔符
echo ------------------------------------------
echo ---------------------------------------
echo ------------------------------------
echo ---------------------------------
echo 第二题
pause
for %%a in (%str%) do (if %%a==cn echo %%a)
echo 根据元素所提取的过程发现%%a变量的变化!
pause>nul

[ 本帖最后由 zysheng110 于 2009-7-16 15:18 编辑 ]

评分

参与人数 1PB +1 收起 理由
wxcute + 1 不错,第二题还可以再理想化。

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 05:38 , Processed in 0.021058 second(s), 13 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表