Board logo

标题: [ 新手习题 6 ] 批处理添加汉字行号 [打印本页]

作者: wxcute    时间: 2008-11-17 09:07     标题: [ 新手习题 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 编辑 ]
作者: chengyuan383    时间: 2008-11-17 10:59     标题: 我不知道是不是这样啊。

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

作者: wxcute    时间: 2008-11-17 11:06     标题: 回复 2楼 的帖子

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

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

[ 本帖最后由 wxcute 于 2008-11-17 11:08 编辑 ]
作者: pusofalse    时间: 2008-11-17 14:32

a.txt中内容是固定的、总在10行之内?还是未知多少行呢?
作者: lhjoanna    时间: 2008-11-17 15:06

看错了,|和┃不一样啊!
粗的┃情况:
  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 编辑 ]
作者: wxcute    时间: 2008-11-17 15:37     标题: 回复 4楼 的帖子

总在 10 行之内吧,暂不考虑过多行数的。
作者: mingming1205    时间: 2008-11-17 16:27

  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 编辑 ]
作者: pusofalse    时间: 2008-11-17 16:28     标题: 回复 6楼 的帖子

是,如果未知多少行,不知要难多少倍了。
作者: batman    时间: 2008-11-17 19:07

适用于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=十 百 千 万...."
作者: BBCC    时间: 2008-11-17 20:40

  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
复制代码
不知道合要求不?
作者: BBCC    时间: 2008-11-17 20:44

跟batman的速度比较还是比较差...
batman
20:42:17.31 20:42:17.35
小弟
20:43:02.04 20:43:02.09
作者: batman    时间: 2008-11-17 21:53

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

作者: batman    时间: 2008-11-18 11:36

真的是如此,查找了原因,原来是在call中出的问题,当%%j中含有空格时要用双引号引
起,并在后面输出时将引号去掉:call :loop %%i "%%j"   echo %string:~,9% %~2
ps:兄弟不用给我加分,呵呵。
作者: BAT1    时间: 2008-11-24 19:23     标题: 回复 12楼 的帖子

你那个代码害的我差点死机了。
使用的时候把99999改成999就很多了
作者: skuny    时间: 2009-1-14 20:03

  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 编辑 ]
作者: myzwd    时间: 2009-3-1 05:46     标题: 回复 2楼 的帖子---call echo 好东西 学习了

@echo off
set tt=一二三四五
set /a t=0
for /f %%i in (ff.txt) do  (
call set rr=%%tt:~!t!,1%%
set /a t+=1
call echo %%rr%%!%%i
)
echo --call echo 开启延迟环境变量---
echo ok
echo --call echo-实现环境变量的嵌套----
echo ---从而可以在for语句中-使数据指针-%%tt%%-动态的变化---
echo --不知道我的理解有没有错误-----
for %%i in (0 1 2) do (
  set uu=%%i
  call echo %%uu%%
)


----------我对call  echo的认识-----------------------------------------
1---call的标准用法
例子1:
  call :a
  goto:eof
:a
:echo 123
例子2:
call :a  123
goto:eof
:a
echo %1

把例子1,2合并,写成一种非标形式:
例子1------>call echo 123----回显123
例子2----->call echo %1---如果保存文件为nn.bat,输入nn 123 ,则回显123
例子3-----call echo %%i ---回显 i---说明脱掉了2个%号,call和echo个脱掉一个
所以 call echo 实际是调用子程序的简写,这样就很容易解释,call有延迟环境变量的功能,但是它并没有
开启延迟环境变量。只是调用了子程序的结果。
2-----call在for中的实例
for %%i in (0 1 2) do (
set t=%%i
echo %t%
)
由于bat是解释执行的,最后就只显示---->2

再看:
call :a
goto:eof
:a
set t=123
for %%i in (0 1 2) do (
set t=%%i
echo %t%
)

回显---》123 123 123,这是因为cmd执行的是解释程序。
改一改
call:a %t%
goto:eof
:a
set t=123
for %%i in (0 1 2) do (
set t=%%i
echo %1
)

这时call 调用子程序的参数,,回显----》2 2 2
上一句call调用的是for执行前的结果,这句调用的是for执行后的结果
由此,的结论:要调用for执行后的结果,应该调用子程序的参数。

再改一改上一句
@echo off
set t=123
for %%i in (0 1 2) do (
set t=%%i
call:a
:a
echo %t%
)
此时显示----》0 123 1 123 2 123这句说明了call可以让数据指针在for语句执行中,跟着for一起舞动,但是for执行完之后,它又回复到了
初始状态。call的这个功能相当于延迟环境变量的功能,但是它没有开启延迟环境变量,我以前的认识是错误的。
因为延迟变量传递值的时间比call早。这句话没法控制数据指针%t%返回到 t=123,无论你把goto:eof加到那里都不行。这是因为call这个支点会把前面的数据推入堆栈,call后就会自动把原来的数据从堆栈里面弹出,这样我们就看到了0 123 1 123 2 123这种数据的舞蹈。遗憾的是bat没有控制堆栈的语句。经过无数人的研究,发现了一种病态的写法来解决这个问题。
再改一改:

@echo off
set t=123
for %%i in (0 1 2) do (
set t=%%i
call echo %%t%%
)
此时回显-----》0 1 2
   原因如下:因为call执行的原理是把它前面的结果先推入堆栈,然后进入分支点,把分支点的内容执行完后,就从堆栈里面弹出保存的数据,然后回到call的下一个支点,继续前进。
  上面语句虽然是病态的,但是那个多加的%号,刚好然call麻醉了。多的那个%号,call认为,它推入堆栈的数据应该是从for开始的数据,for每循环一次的数据 ,call都把它推入堆栈,call执行完子程序后(就是这个病态写法里面的echo %%t%%),就会从堆栈里面弹出数据,然后执行它的下一句,就是进入for的下一次循环。 call语句中数据指针%t%始终指向的是存储单元t  ,for每次循环的值都是放在t存储单元的。从而就动态的看到了t值的变话。方法虽病态,这也是没办法的办法,随叫微软不弄个管理堆栈的命令。延迟环境变量利用的应该也是堆栈技术。setlocal enabledelayedexpansion这句话,就是把前面的数据推入到堆栈。endlocal 就是把推入堆栈的数据弹出来。%t% ,!t! 为数据指针,指向的是存储单元t,所以 call推入堆栈的数据是for的数据。发明这个方法的人,该的诺贝尔奖。呵呵

[ 本帖最后由 myzwd 于 2009-3-1 15:03 编辑 ]
作者: TonyW    时间: 2009-3-7 22:08

原帖由 lhjoanna 于 2008-11-17 15:06 发表
看错了,|和┃不一样啊!
粗的┃情况:@echo off&setlocal enabledelayedexpansion
set "head=一二三四五"
set /a num=0
for /f  %%i in (a.txt) do (
   call echo %%head:~!num!,1%%┃%%i
   set /a num+=1 ...




非常不明白CALL此时的用意,想了两天都没有得到合理的答案,没有它又不行!哎~~
不知道是不是在执行每一行之后暂停,接下去再执行!求求各位大大讲解!!
作者: Batcher    时间: 2009-3-7 23:45     标题: 回复 17楼 的帖子

教学区搜索“变量延迟扩展”
教学区搜索“变量嵌套”
作者: keen    时间: 2009-3-24 23:53

自己研究的,但是不能去掉双引号!郁闷!
是 | ,不是┃。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set hh=一二三四五
  4. set n=0
  5. for /f %%k in (a.txt) do (
  6.             call set v=%%hh:~!n!,1%%
  7.             echo "!v! | %%k"
  8.             set /a n+=1
  9. )
  10. pause
复制代码

作者: batman    时间: 2009-3-25 08:44

我来帮楼上的修改下(看来你的测试文本只有5行):
  1. @echo off&setlocal enabledelayedexpansion
  2. set "hh=一二三四五"&set /a n=0
  3. for /f "delims=" %%k in (a.txt) do (
  4.      call,echo %%hh:~!n!,1%% %%k
  5.      set /a n+=1
  6. )
  7. pause>nul
复制代码

作者: huqianghui    时间: 2009-3-26 15:06

@echo off
setlocal enabledelayedexpansion
set rowNO=0
del temp.txt
for /F %%i in (a.txt) do (
set /A rowNOTemp= !rowNO! + 1 & (
         set rowNO= !rowNOTemp! & (
         echo 当前行号为:!rowNO! ) & (
         if /i "!rowNOTemp!" EQU "1" (
                 echo 一┃ : %%i >>temp.txt
                 ) else (
                 if /i "!rowNOTemp!" EQU "2" (
                 echo 二┃: %%i >>temp.txt
                 ) else (
                 if /i "!rowNOTemp!" EQU "3" (
                 echo 三┃: %%i >>temp.txt
                 ) else (
                 if /i "!rowNOTemp!" EQU "4" (
                 echo 四┃: %%i >>temp.txt
                 ) else (
                 echo 五┃: %%i >>temp.txt
                  ))))
                         )
         )
)

del a.txt
ren temp.txt a.txt
pause
作者: cainiao736    时间: 2009-3-26 21:36

  1. @echo off
  2. set str=一二三四五
  3. setlocal enabledelayedexpansion
  4. for /f %%i in (test2.txt) do (
  5. set a=!str:~0,1!
  6. echo !a! ^|%%i
  7. set str=!str:~1! )
  8. pause
复制代码

[ 本帖最后由 cainiao736 于 2009-3-26 22:00 编辑 ]
作者: keen    时间: 2009-3-27 14:32     标题: 回复 20楼 的帖子

batman兄的改动,更加规范,简洁,但是没有了符号 “|”
我在batman 兄的改动下,再次改动,去掉了双引号。
  1. @echo off&setlocal enabledelayedexpansion
  2. set "hh=一二三四五"&set n=0
  3. for /f %%k in (a.txt) do (
  4.             call set "c=%%hh:~!n!,1%% | %%k"
  5.             echo !c!
  6.             set /a n+=1
  7. )
  8. pause>nul
复制代码

作者: 随风    时间: 2009-3-27 14:42

若测试文本只有5行
:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "hh=一二三四五"
  3. for /f "delims=" %%k in (a.txt) do (
  4.    echo !hh:~0,1! ^| %%k
  5.    set "hh=!hh:~1!"
  6. )
  7. pause>nul
复制代码

作者: keen    时间: 2009-3-28 09:44     标题: 回复 24楼 的帖子

呵呵,还是随风兄牛逼,我被自己弄蒙了。
我想问一下,"delims="  这个分隔符是什么? 不写这个"delims=" 行不行?
作者: Batcher    时间: 2009-3-28 10:18     标题: 回复 25楼 的帖子

tokens=*和delims=的区别是什么?
http://bbs.bathome.net/viewthread.php?tid=1654#pid8870
作者: sjzong    时间: 2009-5-6 14:34     标题: 回复 15楼 的帖子

请问: call echo %%!num!┃%%i
!num!的前面为什么要加两个%%呢?不是用call调用时用%1,%2……表示吗??
作者: Batcher    时间: 2009-5-6 21:02     标题: 回复 27楼 的帖子

参考:批处理中的变量延迟扩展、变量嵌套
http://bbs.bathome.net/viewthread.php?tid=2899
作者: zgq0301    时间: 2009-11-12 11:32

@echo off
setlocal enabledelayedexpansion
set /a var=0
set list=一二三四五
for /f %%i in (a.txt) do (
   call echo %%list:~!var!,1%%┃%%i
   set /a var+=1
   )
pause>nul
%0
作者: bamboo    时间: 2009-11-23 09:45

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "number=一二三四五"
  4. for /f "tokens=*" %%a in (a.txt) do (
  5. set no=!number:~0,1!
  6. echo !no!^|%%a
  7. set number=!number:~1!
  8. )
  9. echo    按任意键退出!
  10. pause>nul
复制代码

作者: feidian1028    时间: 2009-11-27 15:24

@ echo off&setlocal enabledelayedexpansion
set index=0
for /f %%i in (text.txt)do set /a index+=1&echo !index!|%%i
pause>nul
作者: wgoxm521    时间: 2010-1-29 08:04

  1. @echo off & setlocal EnableDelayedExpansion
  2. set "a= 一二三四五"
  3. for /f "delims=" %%i in (2.txt) do (
  4.         set /a "num+=1"
  5.         set "wind!num!=%%i"
  6. )
  7. for /l %%j in (1,1,5) do (
  8.         set "b=!wind%%j!"
  9.         set "c=!a:~%%j,1!"
  10.         echo !c!┃!b!
  11. )
  12. pause>nul
复制代码

十五楼的代码简洁,很巧妙。学习了....

[ 本帖最后由 wgoxm521 于 2010-1-29 08:07 编辑 ]
作者: aiguozhe    时间: 2010-1-29 11:17

高手云集啊!我还需要加紧追赶!
作者: gxuan2008    时间: 2010-7-4 12:35

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "str=一┃二┃三┃四┃五┃"
  4. set /a num=0
  5. for /f "delims=" %%a in (a.txt) do (
  6.     call set new=%%str:~!num!,2%%
  7.     set /a num+=2
  8.     echo !new!%%a
  9. )
  10. pause
复制代码
对call 的用法还不是很明白。==#。

[ 本帖最后由 gxuan2008 于 2010-7-4 14:52 编辑 ]
作者: poxi    时间: 2010-7-18 19:40

答:
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. set str=一二三四五六七八九十
  4. set /a a=0
  5. for /f %%i in (a.txt) do (
  6.    call echo %%str:~!a!,1%%┃%%i
  7.    set /a a+=1
  8. )
  9. pause
复制代码


效果:
[attach]2724[/attach]

=========================
end;
作者: qq106942397    时间: 2010-7-28 21:45

  1. @echo off&setlocal enabledelayedexpansion
  2. Title 未完整板        →ψ疯行天魔Ф
  3. set "ψ=零 一 二 三 四 五 六 七 八 九"
  4. for /f "tokens=1,* delims=:" %%a in ('findstr /n .* "a.txt"') do (
  5. set "Ф=%%a"
  6. set ФФ=0
  7. for %%c in (%ψ%) do (
  8. call set Ф=%%Ф:!ФФ!=%%c%%
  9. set /a ФФ+=1
  10. )
  11. echo !Ф!┃%%b)
  12. pause
复制代码


[ 本帖最后由 qq106942397 于 2010-7-28 21:48 编辑 ]
作者: vincentzhou    时间: 2011-1-1 00:05

  1. @echo off
  2. for /f "tokens=1,* delims=:" %%a in ('findstr /n .* a.txt') do (
  3. if "%%a"=="1" echo 一│%%b
  4. if "%%a"=="2" echo 二│%%b
  5. if "%%a"=="3" echo 三│%%b
  6. if "%%a"=="4" echo 四│%%b
  7. if "%%a"=="5" echo 五│%%b
  8. )
  9. pause>nul
复制代码

[ 本帖最后由 vincentzhou 于 2011-1-1 00:07 编辑 ]
作者: weichenxiehou    时间: 2011-1-4 16:31

@echo off
setlocal enabledelayedexpansion
set str=一二三四五
set m=0
for /f "delims=" %%i in (a.txt) do (
for %%j in (!m!) do echo !str:~%%j,1!^|%%i&set /a m+=1
)
pause
作者: we6540    时间: 2011-1-31 17:17

@echo off
setlocal EnableDelayedExpansion
for /f %%i in (1.txt) do (
set a=%%i
set b=!a:要=一┃要!
set c=!b:可=二┃可潜!
set e=!c:可看=三┃可看!
set f=!e:也=四┃也!
set g=!f:你=五┃你!
echo !g!
)
echo.
ECHO.
echo 好像有点勉强!!!!!!!~M_M~
pause
作者: wangqi0077    时间: 2011-5-28 18:33

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a n=1
  4. set a= 一二三四五六七八九十
  5. for /f %%i in (1.txt) do (
  6. for %%c in (!n!) do set /p=!a:~%%c,1!^|%%i
  7. set /a n=!n!+1
  8. )
  9. pause >nul
复制代码

作者: PCL505512957    时间: 2011-8-16 23:41

悲剧啊,我这个代码哪错啦?老运行不了
  1. @if not defined debug @echo off&setlocal enabledelayedexpansion
  2. set ",=一二三四五" num=
  3. for /f %%i in (a.txt) do (
  4. call echo %%,:~!num!,1%%^|%%i
  5. set /a num+=1
  6. )
  7. pause >nul
复制代码

作者: 无知小菜鸟    时间: 2012-8-31 15:13

本帖最后由 无知小菜鸟 于 2012-8-31 15:15 编辑

看了这道题,和5楼的回答,我看了很久的set教程,终于明白了那句set的作用,是选取head中第%num%开始的2个字符串
  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!,2%%<nul
  6.    set /p=%%i<nul
  7. echo.
  8.    set /a num+=2
  9. )
  10. pause>nul
复制代码

作者: 无知小菜鸟    时间: 2012-8-31 15:34

回复 41# PCL505512957
应该是那个^|%%i的原因,5楼貌似发现了这个问题
作者: Enterpaise    时间: 2013-1-16 16:23

  1. @echo off & setlocal enabledelayedexpansion
  2. set var=一二三四五
  3. for /F %%i in (a.txt) do (
  4.     echo !var:~0,1!^|%%i
  5.      set var=!var:~1!
  6. )
  7. pause>nul
复制代码

作者: battab    时间: 2013-12-9 19:37

  1. @echo off&setlocal enabledelayedexpansion
  2. echo 要怎么学好批处理?>a.txt
  3. echo 可潜水看帖,静静研究;>>a.txt
  4. echo 可看教程做习题,然后解决实际的问题;>>a.txt
  5. echo 也可二者并用取其优,当然还有其他方法。>>a.txt
  6. echo 你是怎么做的呢?>>a.txt
  7. set shu= 一二三四五
  8. for /f "tokens=* delims=" %%i in (a.txt) do (
  9. set str=%%i
  10. set /a n+=1
  11. call echo %%shu:~!n!,1%%┃!str!
  12. )
  13. del a.txt
  14. pause
复制代码

作者: BHsolve    时间: 2013-12-28 16:50

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=* delims=" %%i in (c:\Users\KINGBOOK\Desktop\a.txt) do (
  4. set /a n+=1
  5. if !n! equ 1 echo 一┃%%i
  6. if !n! equ 2 echo 二┃%%i
  7. if !n! equ 3 echo 三┃%%i
  8. if !n! equ 4 echo 四┃%%i
  9. if !n! equ 5 echo 五┃%%i
  10. )
  11. pause
复制代码

作者: ann    时间: 2014-12-18 18:58

还好吧
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "aa=一|二|三|四|五|"
  4. for /f "tokens=*" %%a in (F:\1.txt) do (set /a js+=1&set bb=%%a&call :loop)
  5. pause>nul&exit
  6. :loop
  7. if %js%==1 echo !aa:~0,2!%bb%&goto :eof
  8. if %js%==2 echo !aa:~2,2!%bb%&goto :eof
  9. if %js%==3 echo !aa:~4,2!%bb%&goto :eof
  10. if %js%==4 echo !aa:~6,2!%bb%&goto :eof
  11. if %js%==5 echo !aa:~8,2!%bb%&goto :eof
复制代码

作者: 慕夜蓝化    时间: 2014-12-28 13:48

每一题代码的写法都有所不同,建议往别的方向考虑一下。
我们仅仅针对这道题这说,排除变量名的不同,代码相似度,通过使用不同的命令组合,
解答这题的方案大概也有5到6种。
  1. @echo off&setlocal enabledelayedexpansion
  2. set "l=一二三四五"
  3. for /f %%i in (a.txt) do (
  4.    call set/p=%%l:~!n!,1%%<nul&echo,^|%%i
  5.        set/a n+=1
  6. )
  7. pause>nul&exit
复制代码
这样。应该很不错。
作者: 尘丶    时间: 2015-8-8 19:15

  1. @echo off&setlocal enabledelayedexpansion
  2. set n1=一
  3. set n2=二
  4. set n3=三
  5. set n4=四
  6. set n5=五
  7. for /f "delims=" %%a in (1.txt) do (
  8.     set /a t+=1
  9.     call,set /p=%%n!t!%%<nul
  10. echo;^|%%a
  11. )
  12. pause
复制代码

作者: pcl_test    时间: 2015-8-8 21:32

回复 49# 尘丶
  1. @echo off&setlocal enabledelayedexpansion
  2. (for %%a in (一 二 三 四 五) do set /p %%a=%%a^|&echo;!%%a!)<a.txt
  3. pause
复制代码

作者: wutarnow    时间: 2015-10-19 21:50

回复 1# wxcute
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set line=0
  4. set head=一二三四五
  5. for /f %%I in (a.txt) do (
  6.     echo !head:~,1!^|%%I
  7.     set head=!head:~1!
  8. )
复制代码

作者: 懒虫阿布    时间: 2018-8-1 23:13

贴个用数组的,可显示1~99行
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set hanghao=一 二 三 四 五 六 七 八 九 十
  4. echo %hanghao%
  5. set index=1
  6. for %%a in (%hanghao%) do (
  7. set indexarray[!index!]=%%a
  8. call echo %%indexarray[!index!]%%
  9. set /a index+=1
  10. )
  11. set no=1
  12. for /f "delims=" %%a in (a1.txt) do (
  13. if !no! leq 10 (
  14. call echo %%indexarray[!no!]%%|%%a
  15. ) else if !no! lss 100 (
  16. set /a shiw=!no!/10
  17. set /a gew=!no!%%10
  18. call echo %%indexarray[!shiw!]%%!indexarray[10]!%%indexarray[!gew!]%%|%%a
  19. )
  20. set /a no+=1
  21. )
复制代码

作者: focusos    时间: 2018-8-7 12:57

新手报到,请多多关照
作者: impk    时间: 2019-8-26 15:02

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set str=一二三四五
  4. for /f %%i in ( a.txt ) do (
  5. echo !str:~0,1!^|%%i
  6. set str=!str:~1!
  7. )
  8. pause
复制代码

作者: 772074834    时间: 2023-4-24 20:05

@echo off
set arr=一二三四五
set /a index=0
setlocal enabledelayedexpansion
for /f %%i in (a.txt) do (
        call echo %%arr:~!index!,1%%┃%%i
        set /a index+= 1
)
pause




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2