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

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

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 编辑 ]
1

评分人数

我不知道是不是这样啊。

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

评分人数

    • wxcute: 投机取巧,以后同者不得分,\code 应为 /c ...PB + 1

TOP

回复 2楼 的帖子

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

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

[ 本帖最后由 wxcute 于 2008-11-17 11:08 编辑 ]

TOP

a.txt中内容是固定的、总在10行之内?还是未知多少行呢?
心绪平和,眼藏静谧。

TOP

看错了,|和┃不一样啊!
粗的┃情况:
  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 编辑 ]
2

评分人数

TOP

回复 4楼 的帖子

总在 10 行之内吧,暂不考虑过多行数的。

TOP

  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 编辑 ]
1

评分人数

TOP

回复 6楼 的帖子

是,如果未知多少行,不知要难多少倍了。
心绪平和,眼藏静谧。

TOP

适用于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=十 百 千 万...."
1

评分人数

    • wxcute: 管理员也来拿分吗 -_-'''PB + 1
***共同提高***

TOP

  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
复制代码
不知道合要求不?
1

评分人数

TOP

跟batman的速度比较还是比较差...
batman
20:42:17.31 20:42:17.35
小弟
20:43:02.04 20:43:02.09

TOP

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
复制代码
1

评分人数

    • wxcute: 这个好,就是会忽略空格及后面内容。PB + 3
***共同提高***

TOP

真的是如此,查找了原因,原来是在call中出的问题,当%%j中含有空格时要用双引号引
起,并在后面输出时将引号去掉:call :loop %%i "%%j"   echo %string:~,9% %~2
ps:兄弟不用给我加分,呵呵。
***共同提高***

TOP

回复 12楼 的帖子

你那个代码害的我差点死机了。
使用的时候把99999改成999就很多了

TOP

  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 编辑 ]
3

评分人数

TOP

返回列表