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

[ 新手练习题 4 ]批处理读取文本但不显示注释内容

[ 新手练习题 4 ] 读取文本但不显示注释内容
有一文本文件,开头为分号“;”的整行内容为注释,还有双斜杠“//”及其后面的内容为注释。
要如何显示出注释的内容呢?即显示除注释以外的内容。

目的:学习多种字符串处理的方法。

要求:以示例文本为模板,也可自己构造文本。
   方法不限。


评分:代码可读性 1 分;
   首个新方法 7 分,第二个 5 分,依次类推,最少 2 分;
   一人可多种方法,新方法追加 2 分,已经出现过的方法追加 1 分;
   只处理一种注释分数减半。

示例文本
  1. ;这里是注释,只有开头是分号的才是注释,分号在其他位置不是哦!
  2. //这也是注释,一般放在正文后面,当然也可以放在开头。
  3. ;批处理之家新手练功区介绍
  4. 新手练功区为新手提供实战前的测试。
  5. 就像在游戏中打怪,
  6. 新手在这里升级,新手在这里成长。  //新手区宣言
复制代码

[ 本帖最后由 wxcute 于 2009-6-9 21:42 编辑 ]
批处理之家论坛官方 QQ 群 :【当前人数/人数上限】【2009-07-08】
群①:43011867(181/200);群②:(暂缺数据);群③:66165582(120/200)。

还有双斜杠“//”及其后面的内容为注释。
...

// 在文本的什么位置呢?应该说明一下吧。
技术问题请到论坛发帖求助!

TOP

不知道行不行,手机发帖没测试

  1. @echo off
  2. for /f "eol=;" %%i in (test.txt) do (
  3.    echo %%i >>temp.txt
  4.    )
  5. for /f "eol=//" %%j in (temp.txt) do (
  6.    echo %%j
  7. )
  8. del temp.txt
  9. pause>nul&exit
复制代码

[ 本帖最后由 wangshuping42 于 2009-6-8 23:20 编辑 ]
1

评分人数

    • wxcute: 鼓励一下,但有错误。如 eol 选项只能接受一 ...PB + 1

TOP

a.txt
  1. 4981 5487 2724 2419 4837 2218 37 19 2880 5521
  2.                            ;9613 7292 7433 554 8287 1147 9516 5678 9760 3028
  3. 9220 5936 3580 6455 8116 9776 6246 1652 6390 6615
  4. 7855 7707 1850 4564 2454 4571 7330 8718 4499 5083
  5. 7683 3076 637 3644 9714 6080 9554 8250 5353 6692
  6. 4036 9590 4539 8156 7648 6738 8834 7033 4043 9729
  7. //7512 1299 1611 1054 9291 9948 7213 5882 6891 6149
  8. 1159 7604 1290 7426 8342 4907 7802 2285 6828 4547
  9.              //940 4594 5470 3831 7949 3308 8553 5841 4532 6151
  10. ;2048 4362 7137 6227 1843 2833 119 6124 6716 4435
  11. 6342 132 4637 4359 7482 632 8 35 9999 1023
复制代码
代码:
  1. @echo off
  2. for /f "delims=" %%i in ('findstr /n .* a.txt') do (
  3.     set str=%%i
  4.     setlocal enabledelayedexpansion
  5.     set str=!str:*:=!
  6.     set str=!str:*//=;!
  7.     set str=!str:*;=;!
  8.     for /f "delims=" %%a in ("!str!") do echo %%a
  9.     endlocal
  10. )
  11. pause
复制代码
1

评分人数

    • wxcute: 因我的失误,未说明清楚。按原来的解释可得 ...PB + 7
(*^_^*)

TOP

回复 2楼 的帖子

感谢指正,已在示例文本中添加说明。
批处理之家论坛官方 QQ 群 :【当前人数/人数上限】【2009-07-08】
群①:43011867(181/200);群②:(暂缺数据);群③:66165582(120/200)。

TOP

处理了一下开头有空格的行及空白行
测试文本test.txt如下:
  1. asdfas dflasdf
  2.   ;asdlfkjlk
  3.   //alsdkflk
  4. ;hfajksdfhk
  5. //kljhadsf
  6.    
  7. poipoi //asdf
  8. asdfasdf; //asdf
  9. klhjasdf; asdf
复制代码
代码:
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "tokens=*" %%a in (test.txt) do ( if not "%%a"==""  echo %%a >> _tmp.txt )
  3. for /f "usebackq delims=" %%i in (`findstr /V "^; ^//" _tmp.txt`) do (
  4.     set str=%%i
  5.     set str=!str://=@!
  6.     for /f "delims=@" %%j in ("!str!") do echo %%j
  7. )
  8. del _tmp.txt
  9. pause>nul
复制代码
1

评分人数

    • wxcute: 结果比较理想。PB + 7

TOP

  1. @echo off
  2. for /f "tokens=1* delims=//" %%a in ('type a.txt ^|findstr /v /b /c:"//"') do echo %%a
  3. pause >nul
复制代码
1

评分人数

    • wxcute: 单文本内容中有单斜杠时会被认为是注释。 ...PB + 3

TOP

  1. @echo off
  2. for /f "eol=/  delims=/ tokens=1" %%i in (tset.txt) do echo %%i>>b.txt
  3. for /f %%j in (b.txt) do echo %%j
  4. del b.txt&pause
复制代码
自己感觉不好,应该再简化一下。

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f  "eol=; delims=" %%a in (sample.txt) do (
  3.       set "x=%%a"&set b=!x:*//=!
  4.       if defined b (call set var=%%x://!b!=%%) else set var=!x!
  5.       if defined var echo !var!>>resolution.txt
  6. )
  7. pause
复制代码

[ 本帖最后由 Lumiere 于 2009-8-7 00:45 编辑 ]
Still with wax

TOP

先把";"  开头的行剔除并把其他行开头添加 “// ”,再用FOR 显示 //  割断的第一部分。

@ECHO OFF
IF EXIST TEMP.TXT DEL TEMP.TXT
FOR /F "EOL=; DELIMS=" %%C IN ('type TEST.TXT') DO (
  SET "X=%%C"
  SETLOCAL ENABLEDELAYEDEXPANSION
  ECHO // !X!>>TEMP.TXT
  ENDLOCAL
)
FOR /F "TOKENS=1 DELIMS=//" %%D IN ('TYPE TEMP.TXT') DO (
  IF NOT "%%D"==" " ECHO %%D
)
DEL TEMP.TXT
PAUSE

TOP

返回列表