[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 cjiabing 于 2011-8-18 12:42 编辑

回复 250# kevinak

B1题:
    鼓励一下,至少你已经成功了一半。
    懂得“输出变量”吗?再仔细阅读帮助信息,稍微改动一下你就可以完成了。
    其实,用一个FOR就可以完成了。
B2题:
    注意,还有显示文件名、路径名、和后缀名。
B3题:
    很好。
B4题:
    很好。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 252# 545810831


    请向楼下学习一下。虽然你很辛苦地写出来了,不过还需要加强。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

本帖最后由 cjiabing 于 2011-8-22 16:10 编辑

回复 261# kevinak


    你还是没有弄清楚什么是输出变量呢。直接在cmd窗口执行:
  1. for /f "tokens=1,2,3,4 delims=,。" %a in ("床前明月光,疑是地上霜。举头望明
  2. 月,低头思故乡。") do echo %a&echo %b&echo %c&echo %d
复制代码

如果不考虑标点符号可以更加简单:
  1. for  %a in (床前明月光 疑是地上霜 举头望明月 低头思故乡) do echo %a
复制代码

这是我出题的初衷,但忘记有标点符号了。你们随意做了。将标点符号改成英文的也可以:
  1. for  %a in (床前明月光,疑是地上霜,举头望明月,低头思故乡.) do echo %a
复制代码
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

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

回复 273# xudaweb


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

TOP

回复 272# aber02zzl
为了帮你评阅特意重新阅读了题目,有两个小问题需要指出!~

答案2命令写错了。
for /l %%a in (1 2 100) de echo %%a

答案3
for /f "tokens=1-3 delims=. " %%a in ("bbs bathome.net") do echo %%a&echo %%b&echo %%c
存在问题:
第一是处理字符串要用双引号;第二是输出变量要与tokens指定的数目一致,你指定了 1-3 个输出变量,那后面就要用 1-3 个输出变量。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 277# andy七少

for /f "tokens=1,2,3,4"  %%a   in (test.txt) do (

    注意命令书写规范!~另外,tokens=1-4 会显得更加减缩。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 284# 几维kiwi

——::搜索系统盘(如C:\)下包含字符“mplayer”的所有文件(系统播放器),并分别显示路径名、文件名和后缀名。
    for /r c:\ %%i in (*mplayer*) do echo %%i  %%~ni   %%~xi
——要善于利用扩充变量:
     %~pI        - 仅将 %I 扩充到一个路径
     %~nI        - 仅将 %I 扩充到一个文件名
     %~xI        - 仅将 %I 扩充到一个文件扩展名
     ……
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 285# 几维kiwi

    注意审题:::显示递减数列:100、98、96、……、4、2、0,并求和。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

返回列表