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

[ 新手习题 6 ] 批处理添加汉字行号

[复制链接]
发表于 2008-11-17 09:07:05 | 显示全部楼层 |阅读模式
a.txt
  1. 要怎么学好批处理?
  2. 可潜水看帖,静静研究;
  3. 可看教程做习题,然后解决实际的问题;
  4. 也可二者并用取其优,当然还有其他方法。
  5. 你是怎么做的呢?
复制代码
以上文本有五行,要求显示如下:(行号可为大写,但必须是汉字)
  1. 一┃要怎么学好批处理?
  2. 二┃可潜水看帖,静静研究;
  3. 三┃可看教程做习题,然后解决实际的问题;
  4. 四┃也可二者并用取其优,当然还有其他方法。
  5. 五┃你是怎么做的呢?
复制代码
方法不限。答对加分鼓励,第一个最多。
上一题:[ 新手练习 5 ] 随机显示星期几
http://bbs.bathome.net/thread-2564-1-1.html
下一题:[ 新手练习 7 ] 把所有输出都写入一个文件
http://bbs.bathome.net/thread-2582-1-1.html

[ 本帖最后由 wxcute 于 2008-11-18 21:04 编辑 ]

评分

参与人数 1PB +5 收起 理由
Batcher + 5 Good work!

查看全部评分

发表于 2008-11-17 10:59:07 | 显示全部楼层

我不知道是不是这样啊。

  1. @echo off
  2. @echo 一┃要怎么学好批处理?
  3. @echo 二┃可潜水看帖,静静研究;
  4. @echo 三┃可看教程做习题,然后解决实际的问题;
  5. @echo 四┃也可二者并用取其优,当然还有其他方法。
  6. @echo 五┃你是怎么做的呢
  7. pause
复制代码

评分

参与人数 1PB +1 收起 理由
wxcute + 1 投机取巧,以后同者不得分,\code 应为 /c ...

查看全部评分

 楼主| 发表于 2008-11-17 11:06:27 | 显示全部楼层

回复 2楼 的帖子

小心我扣你分 ^_^ 。代码括起来也用错了,应该是 code

是要通过批处理读取 a.txt 文件。

[ 本帖最后由 wxcute 于 2008-11-17 11:08 编辑 ]
发表于 2008-11-17 14:32:14 | 显示全部楼层
a.txt中内容是固定的、总在10行之内?还是未知多少行呢?
发表于 2008-11-17 15:06:44 | 显示全部楼层
看错了,|和┃不一样啊!
粗的┃情况:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "head=一二三四五"
  3. set /a num=0
  4. for /f  %%i in (a.txt) do (
  5.    call echo %%head:~!num!,1%%┃%%i
  6.    set /a num+=1
  7. )
  8. pause
复制代码
"或"字符|:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "head=一二三四五"
  3. set /a num=0
  4. for /f  %%i in (a.txt) do (
  5.    call set /p=%%head:~!num!,1%%<nul
  6.    set /p=^|%%i<nul
  7.    echo.
  8.    set /a num+=1
  9. )
  10. pause>nul
复制代码

[ 本帖最后由 lhjoanna 于 2008-11-17 20:39 编辑 ]

评分

参与人数 2PB +9 技术 +1 收起 理由
impk + 1 学习一下
wxcute + 9

查看全部评分

 楼主| 发表于 2008-11-17 15:37:18 | 显示全部楼层

回复 4楼 的帖子

总在 10 行之内吧,暂不考虑过多行数的。
发表于 2008-11-17 16:27:15 | 显示全部楼层
  1. @echo off
  2. set "var="
  3. setlocal enabledelayedexpansion
  4. for %%i in (一 二 三 四 五) do (
  5. set /a var+=1
  6. set ,!var!=%%i
  7. )
  8. set "var="
  9. for /f "eol= delims=" %%a in (a.txt) do (
  10. call :sub %%a
  11. )
  12. pause>nul
  13. exit
  14. :sub
  15. set /a var+=1
  16. echo !,%var%!┃%1
  17. goto :eof
复制代码

[ 本帖最后由 mingming1205 于 2008-11-17 16:31 编辑 ]

评分

参与人数 1PB +8 收起 理由
wxcute + 8 很不错

查看全部评分

发表于 2008-11-17 16:28:31 | 显示全部楼层

回复 6楼 的帖子

是,如果未知多少行,不知要难多少倍了。
发表于 2008-11-17 19:07:29 | 显示全部楼层
适用于1-99行的:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=一 二 三 四 五 六 七 八 九 十"
  3. for %%i in (%str%) do set /a n+=1&set "_!n!=%%i"
  4. for /f "tokens=1* delims=:" %%i in ('findstr /n .* a.txt') do (
  5.      set "a=%%i"
  6.      if "!a:~1!" equ "" (
  7.         echo !_%%i!行 %%j
  8.         ) else (
  9.         call,echo %%_!a:~,1!%%十%%_!a:~1!%%行 %%j
  10.      )
  11. )
  12. pause>nul
复制代码

同理可写适于1-999行,1-9999行,1-9.........9行,只要再设置个变量set "var=十 百 千 万...."

评分

参与人数 1PB +1 收起 理由
wxcute + 1 管理员也来拿分吗 -_-'''

查看全部评分

发表于 2008-11-17 20:40:34 | 显示全部楼层
  1. @echo off&SETLOCAL ENABLEDELAYEDEXPANSION&set "code=一 二 三 四 五"&set a=
  2. goto :main
  3. :head
  4. set str=%1
  5. set /a a+=1
  6. for /f "tokens=%a% delims= " %%b in ("%code%") do (
  7. set str%a%=!str:%a%=%%b!
  8. set str%a%=!str%a%::=┃!)
  9. goto :eof
  10. :main
  11. for /f "delims=" %%a in ('findstr/n . a.txt') do (call :head %%a)
  12. for /l %%b in (1 1 5) do (echo. !str%%b!)
  13. pause
复制代码
不知道合要求不?

评分

参与人数 1PB +7 收起 理由
wxcute + 7 加分鼓励

查看全部评分

发表于 2008-11-17 20:44:01 | 显示全部楼层
跟batman的速度比较还是比较差...
batman
20:42:17.31 20:42:17.35
小弟
20:43:02.04 20:43:02.09
发表于 2008-11-17 21:53:13 | 显示全部楼层
1-99999行的:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=一 二 三 四 五 六 七 八 九"&set "var=万千百十零"
  3. for %%i in (%str%) do set /a n+=1&set "_!n!=%%i"
  4. for /f "tokens=1* delims=:" %%i in ('findstr /n .* a.txt') do (
  5.      set "a=%%i"&call :lp
  6.      call,set "b=%%var:~-!m!%%"&set "m=0"
  7.      set "a=%%i"
  8.      call :loop %%i "%%j"
  9. )
  10. pause>nul&goto :eof
  11. :lp
  12. set "a=%a:~1%"&set /a m+=1
  13. if defined a goto lp
  14. goto :eof
  15. :loop
  16. if %1 lss 10 (
  17.   call,set "string=%string%零%%_!a:~,1!%%"
  18.   ) else (
  19.   if %a:~,1% equ 0 (
  20.      set "string=%string%零"
  21.      ) else (
  22.      if "%b:~,1%" neq "零" (
  23.         call,set "string=%string%%%_!a:~,1!%%%b:~,1%"
  24.         ) else (
  25.         call,set "string=%string%%%_!a:~,1!%%"
  26.      )
  27.    )
  28. )
  29. set "b=%b:~1%"&set "a=%a:~1%"
  30. if defined a goto loop
  31. set "string=%string:零零零=零%"
  32. set "string=%string:零零=零%"
  33. if "%string:~-1%" equ "零" set "string=%string:~,-1%
  34. set "string=%string%行         "
  35. echo %string:~,9% %~2&set "string="
复制代码
测试文本a.txt由下面的代码生成
  1. @echo off
  2. for /l %%i in (1,1,99999) do echo %%i>>a.txt
复制代码

评分

参与人数 1PB +3 收起 理由
wxcute + 3 这个好,就是会忽略空格及后面内容。

查看全部评分

发表于 2008-11-18 11:36:23 | 显示全部楼层
真的是如此,查找了原因,原来是在call中出的问题,当%%j中含有空格时要用双引号引
起,并在后面输出时将引号去掉:call :loop %%i "%%j"   echo %string:~,9% %~2
ps:兄弟不用给我加分,呵呵。
发表于 2008-11-24 19:23:31 | 显示全部楼层

回复 12楼 的帖子

你那个代码害的我差点死机了。
使用的时候把99999改成999就很多了
发表于 2009-1-14 20:03:30 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. call :111 一 二 三 四 五
  3. pause>nul&goto :eof
  4. :111
  5. for /f  %%i in (a.txt) do (
  6.    set /a num+=1
  7.    call echo %%!num!┃%%i
  8.    )
  9. goto :eof
复制代码

[ 本帖最后由 skuny 于 2009-1-14 20:05 编辑 ]

评分

参与人数 3PB +6 技术 +2 收起 理由
taofan712 + 1
battab + 1 good!
wxcute + 6 不错,哈哈

查看全部评分

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

本版积分规则

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

GMT+8, 2026-3-17 05:08 , Processed in 0.026728 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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