[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 262# cjiabing
谢谢版主,看过您的代码已经非常明朗了。额,您说的非常对,这个输出变量是知道,但是不知道怎么用。

TOP

B6 答案
  1. @echo off
  2. for /f "usebackq delims=" %%i in (`findstr /r "^13.*damages.$" "%programfiles%\Windows Media Player\eula.txt"`) do echo %%i
  3. pause>nul
复制代码
额,做出来之后感觉非常简单。总结了下,还是对命令及参数的用法等不熟悉造成的。开始我直接用findstr跑,直接就出来了,后来添加到for语句里面,不行。不用usebackq和delims也不行。
1

评分人数

    • cjiabing: 呵呵,用findstr了,还好,鼓励一下。技术 + 1

TOP

1.
  1. for /L %%a in (1,1,100) do echo %%a
复制代码
2.
  1. for /L %%a in (1,2,99) do echo %%a
复制代码
3.
  1. for %%a in (bbs,bathome,net ) do echo %%a
复制代码

TOP

回复 252# 545810831


    看这好久,没有看明白,隔下能否解释下啊?

TOP

回复 253# kevinak


    set /a sum+=%%a
这是不是SUM+%%A。。。它怎么计算出所有值的和的呢?

TOP

本帖最后由 zaixinxiangnian 于 2011-8-29 16:22 编辑

弄了四五个小时 最后两题还是没有做出来
麻烦版主或哪位大侠给出好的参考代码
A1
  1. @echo off
  2. for /l %%i in (1,1,100) do echo %%i
  3. pause>nul
复制代码
A2
  1. @echo off
  2. for /l %%i in (1,2,99) do echo %%i
  3. pause>nul
复制代码
A3
@echo off
set val=bbs bathome.net
for %%i in (1 2 3) do echo %val%
pause>nul


A4-1
  1. @echo off
  2. for /f "tokens=1,2,3" %%i in (a.txt) do echo %%i %%j %%k
  3. pause>nul
复制代码
A4-2
  1. @echo off
  2. for /f "tokens=2" %%i in (a.txt) do echo %%i
  3. pause>nul
复制代码
B1
  1. @echo off
  2. for /f "skip=1" %%i in (1.txt) do echo %%i
  3. pause>nul
复制代码
B2
  1. @echo off
  2. for /r c:\ %%i in (mplayer.*) do echo %%i
  3. pause>nul
复制代码
B3
  1. @echo off
  2. for /l %%i in (100,-2,0) do set /a sum+=%%i
  3. echo %sum%
  4. pause
复制代码
B4
  1. @echo off
  2. for /f "delims=“” tokens=5" %%i in (2.txt) do echo %%i
  3. pause
复制代码
B5
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "skip=15 delims=: tokens=2" %%i in ('ipconfig/all') do (
  3. set /a n+=1
  4. if !n!==1 set a=%%i
  5. )
  6. echo %a%
  7. pause
复制代码
B6 跟B5应该差不多的,只是要加个USEBACKQ 可是怎么改都不对
我的文件本在D:\Program Files\2.txt  要提取的在第七行
下面是运行不成功
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "usebackq skip=6 tokens=*" %%i in ("D:\Program Files\2.txt") do (
  3. set /a n+=1
  4. if !n!==1 set a=%%i
  5. )
  6. echo %a%
  7. pause
复制代码
其中把if !n!==1 set a=%%i 中的1 改为6 把skip去掉还是不行 请大侠指点

B7不会做

TOP

本帖最后由 brim 于 2011-9-23 01:06 编辑

学习中,多做习题。不足之处望不吝指正。
第一套
第一题
  1. @echo off
  2. for /l %%i in (1,1,100) do echo %%i
  3. pause
复制代码
第二题
  1. @echo off
  2. for /l %%i in (1,2,100) do echo %%i
  3. pause
复制代码
第三题
  1. @echo off
  2. for /f "tokens=1-3 delims=. "  %%i in ("bbs bathome.net") do echo %%i &echo %%j &echo %%k
  3. pause
复制代码
第四题①
  1. @echo off
  2. for /f "tokens=*" %%i in (test.txt) do echo %%i
  3. pause
复制代码

第四题①
  1. @echo off
  2. for /f "tokens=1-3" %%i in (test.txt) do echo %%i  %%j  %%k
  3. pause
复制代码

第四题①
  1. @echo off
  2. for /f "delims=" %%i in (test.txt) do echo %%i
  3. pause
复制代码
第四题②
  1. @echo off
  2. for /f "tokens=2" %%i in (test.txt) do echo %%i
  3. pause
复制代码
第二套
B1
  1. @echo off
  2. for %%i in (《静夜思》 床前明月光   疑是地上霜   举头望明月   低头思故乡) do echo %%i
  3. pause
复制代码
B2
  1. @echo off
  2. for /r C:\ %%i in (*mplayer*.*) do echo %%i
  3. pause
复制代码
B3
  1. @echo off
  2. for /l %%i in (100,-2,0) do echo %%i&set/a num+=%%i
  3. echo 结果是:%num%
  4. pause
复制代码
B4
  1. @echo off
  2. for /f "tokens=5 delims=“”" %%i in ("“穿了裙子,不等于说可以。”加拿大警察的“如果不想被强奸,就不要把自己打扮得像荡妇”言论引发了世界性的抗议。7月31日,继加拿大、美国、英国、澳大利亚、巴西、荷兰、韩国之后,印度新德里也举行了“荡妇大游行”。") do echo %%i
  3. pause
复制代码
B5
  1. @echo off
  2. ipconfig>ipcon.txt
  3. find "IP Address" ipcon.txt>ip.txt
  4. for /f "skip=2 tokens=15 delims= " %%i in (ip.txt) do echo %%i
  5. del ipcon.txt ip.txt
  6. pause
复制代码
待续……

TOP

本帖最后由 cjiabing 于 2011-9-25 23:50 编辑

我将第二套题的答案公布出来吧:

B1分行显示李白的古诗《静夜思》:“床前明月光   疑是地上霜   举头望明月   低头思故乡”
  1. for %%a in (床前明月光 疑是地上霜 举头望明月 低头思故乡) do echo %%a
复制代码

——使用txt也得。不过有些人没注意看提示,第一个是不用参数的FOR就可以完成了,原因是空格,点号(.)等都是默认的分隔符,会自动将句子分行显示。这是FOR的特性。当然,使用FOR /F也可以,啰嗦了点。

B2搜索并分别显示路径名、文件名和后缀名
  1. @echo off
  2. for /r c:\ %%i in (mplayer.*) do echo 完整路径名:%%i;路径名:%%~dpi;文件名:%%~ni;后缀名:%%~xi
  3. pause>nul
复制代码

借楼上的代码修改了用。一个涉及到搜索参数FOR /R,一个涉及到批处理参数。什么是批处理参数?用“FOR/?”看看最后面的内容。
另外要记得,FOR /R的搜索快是快,但无法搜索隐藏的文件。而批处理参数应用广泛,最好熟悉。

B3、显示递减数列:100、98、96、……、4、2、0,并求和
这个不难了。只要掌握/L是数列顺序等,然后大的数在前面,小的数在后面,这是递减;小的数在前面,大的数在后面是递增;中间的数是递增或递减的级数。要注意的是0的位置和使用,有时候括号内什么都没有时,或者全部是0时有可能导致死循环。
  1. @echo off
  2. for /l   %%i  in  (100,-2,0) do echo %%i&set /a str+=%%i
  3. echo 总和:%str%
  4. pause
复制代码


B4、从句子中提取“荡妇大游行”这个词:
  1. for /f "tokens=5 delims=“”" %%a in ("“穿了裙子,不等于说可以。”加拿大警察的“如果不想被强奸,就不要把自己打扮得像荡妇”言论引发了世界性的抗议。7月31日,继加拿大、美国、英国、澳大利亚、巴西、荷兰、韩国之后,印度新德里也举行了“荡妇大游行”。") do echo %%a
复制代码

说到提取嘛,一般都是用tokens=来提取指定的列,而提取前先用delims=进行切分。本例使用中文的双引号进行分隔,然后再提该词语所在的列。
用来切割的delims=可以是空格和其他特殊符号,也可以是英文和汉字。当然,使用双引号做分隔符需要其他技巧。

B5、请提取 IP 地址“192.168.1.100”。
我觉得最简便的方法如下:
  1. @echo off
  2. for /f "tokens=1,2 delims=:" %%i in ('ipconfig/all') do if /i "%%i"=="        IP Address. . . . . . . . . . . . " echo;%%j
  3. pause
复制代码

有点投机取巧。当然,还有更多的技巧,我也做过其他的,目的是看大家对FOR /F的选项使用的熟练程度,比如skip、usebackq、eol等等。

B6提取指定行
方法也有很多,比如,如果预先知道包含关键词的可以用FIND和FINDSTR。
如果知道行数的,也可以使用FINDSTR和FOR组合提取。findstr /n 是显示搜索结果的所在行,用此即可查到行。
不过单纯用FOR也可以解决。其中,skip和more功能上有点类似,可以忽略第几行,然后从第几行开始显示。
因此,所谓的提取指定行,要么是知道该行的行号,要么是知道该行的关键词。通过这些都可以提取。方法多多,此处还是用老办法:
  1. ::提取指定行
  2. @echo off
  3.     set /p p=请输入要文本路径:
  4.     set /p m=请输入要定位的行:
  5.     echo.
  6.     for /f "tokens=1,* delims=:" %%a in ('findstr /n .* %p%^|findstr /b   "%m%"') do if %%a==%m% echo %%b
  7.     echo.
  8. pause
复制代码

差点忘记补usebackq的使用了。之所以把路径定在“C:\Program Files\windows media player”(其实在桌面就可以了),目的就是为了考考大家对路径中有空格时怎么处理。是啊,一般情况下是直接用双引号的,但在特殊情况下,你会用到usebackq。
  1. @echo off
  2. for /f "usebackq tokens=*" %%a in ("C:\Documents and Settings\Administrator\桌面\a.txt") do echo %%a
  3. pause
复制代码

假如桌面上有一个文件a.txt,你的这个bat则放在D盘,在D盘打开桌面上的东西就会发生错误,此时,只能用usebackq。
在FOR /F中,双引号通常用作显示字符串的,而批处理中路径含有空格等特殊符号时,也是使用双引号,这里就存在冲突了,使用双引号的话,路径就会变成字符串显示,而不显示文本中的文字。此时,需要usebackq来重新定义双引号的作用。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

第一套:
1.答案
  1. @echo off
  2. for /l %%a in (1 1 100) de echo %%a
  3. pause
复制代码
2.答案
  1. @echo off
  2. for /l %%a in (1 2 100) de echo %%a
  3. pause
复制代码
3.答案
  1. @echo off
  2. for /f "tokens=1-3 delims=. " %%a in (bbs bathome.net) do echo %%a
  3. pause
复制代码
4.1答案
  1. @echo off
  2. type f:\test.txt
  3. pause
复制代码
4.2答案
  1. @echo off
  2. for /f "tokens=2 delims= " %%a in (f:\test.txt) do echo %%a
  3. pause
复制代码

TOP

回复 271# cjiabing
你的B3答案有笔误,应该是-2.
  1. @echo off
  2. for /l   %%i  in  (100,-2,0) do echo %%i
  3. pause
复制代码
自己用心做了一遍,尽管好多代码不够简练,简单的能做出来大部分。
难度大的只有B6,B7做不出来...而且一点思路都没有,没得办法...
学习...

TOP

回复 273# xudaweb


    谢谢提醒!第六题可以发挥一下你的能力,第七题不建议做了,我都搞不定。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

慢慢学习   望以后有问题时,高手能够帮忙解决
停下的理由千千万万,向前的理由一个就已足够!

TOP

4、先将以下内容保存到F:\test.txt
1      2        3
4      5        6
7      8        9
①将f:\test.txt内容全部显示在批处理窗口;
  1. @echo off
  2. for /f "delims=" %%a in (F:\test.txt) do echo %%a
  3. pause
复制代码
②只显示 2      5        8显示在批处理窗口(分三行显示,每字一行)
  1. @echo off
  2. for /f "tokens=2" %%a in (F:\test.txt) do echo %%a
  3. pause
复制代码
1

评分人数

智慧是创造财富的唯一保障!

TOP

B1、分行显示李白的古诗《静夜思》:“床前明月光   疑是地上霜   举头望明月   低头思故乡”
先在桌面上创建一个文件test.txt并且输入:床前明月光   疑是地上霜   举头望明月   低头思故乡
在桌面上创一个批处理
  1. @echo off
  2. for /f "tokens=1,2,3,4" in (test.txt) do (
  3. echo %%a
  4. echo %%b
  5. echo %%c
  6. echo %%d)
  7. pause
复制代码
智慧是创造财富的唯一保障!

TOP

第一套 第三题
  1. @echo off
  2. for /f  "delims=. tokens=1,2" %%i in ("bbs bathome.net") do (
  3. for %%k in (%%i %%j) do echo %%k)
  4. pause
复制代码
1

评分人数

TOP

返回列表