Board logo

标题: [文本处理] 批处理动态逐字显示一副对联中call的解释 [打印本页]

作者: baiyuheitu    时间: 2009-4-30 13:58     标题: 批处理动态逐字显示一副对联中call的解释

这段代码应如何解释,尤其是设计call的部分,搜索解释也没找到,最头疼的是程序中有的地方的%多的看的我晕头转向!

  1. @echo off
  2. set str=四四四四ABCDEFG1234567
  3. set "line=                    "
  4. set "sleep=ping 127.1 -n 2 >nul"
  5. echo.
  6. call :split  4 7  col   
  7. call :split 11 7  col "cls&echo."
  8. call :split  0 4 line "cls"
  9. pause>nul
  10. goto :eof
  11. :split
  12. set /a _tmp1=%1+%2-1,count=0
  13. for /l %%a in (%1,1,%_tmp1%) do (
  14. set /a count+=1
  15. %~4
  16. if %~3 == col (
  17. call call set %3%%count%%=%%%%%3%%count%%%%%%%line%%%str:~%%a,1%%
  18.     if %~1 == 4 (
  19.         call :cout %%count%%  %%count%% %~3
  20.     ) else (
  21.         call :cout 1          7         %~3
  22.     )
  23. ) else (
  24. call set %3=%%%3%%   %%str:~%%a,1%%
  25. call :cout 1          7         col "echo %%%3%%"
  26. )
  27. %sleep%
  28. )
  29. goto :eof
  30. :cout
  31. %~4
  32. for /l %%i in (%1,1,%2) do (
  33. call echo.%%%3%%i%%
  34. )
  35. goto :eof
复制代码

作者: everest79    时间: 2009-4-30 20:20

原帖由 Batcher 于 2009-2-3 19:10 发表

什么是延迟环境变量扩展?
http://bbs.bathome.net/thread-3083-1-1.html

变量延迟详解
http://bbs.bathome.net/thread-2898-1-1.html

什么情况下该使用变量延迟
http://bbs.bathome.net/thread-2899-1-1.html

一个变量嵌套变量的问题
http://bbs.bathome.net/thread-2900-1-1.html

什么时候使用延迟变量?为什么要使用?
http://bbs.bathome.net/viewthread.php?tid=112

延迟变量通俗解释
http://bbs.bathome.net/viewthread.php?tid=354


嘿嘿看看这些
作者: suneast    时间: 2009-4-30 20:47

楼上的给个解析吧,我也是刚来的不懂啊?
那些教程虽然有用,但是在我找到答案的时候。。。
谁来帮忙?
作者: everest79    时间: 2009-4-30 20:58

这样可能比较清楚,具体的其实可以打开回显或插入set&pause来查看变量变化
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set str=四四四四ABCDEFG1234567
  4. set "line=                    "
  5. set "sleep=ping 127.1 -n 1 >nul"
  6. echo.
  7. call :split  4 7  col   
  8. ::set&pause
  9. call :split 11 7  col "cls&echo."
  10. call :split  0 4 line "cls"
  11. pause>nul
  12. goto :eof
  13. :split
  14. set /a _tmp1=%1+%2-1,count=0
  15. for /l %%a in (%1,1,%_tmp1%) do (
  16. set /a count+=1
  17. %~4
  18. if %~3 == col (
  19. call set %3!count!=%%%3!count!%%%line%!str:~%%a,1!
  20.     if %~1 == 4 (
  21.         call :cout !count!  !count! %~3
  22.     ) else (
  23.         call :cout 1        7       %~3
  24.     )
  25. ) else (
  26. set %3=!%3!   !str:~%%a,1!
  27. call :cout 1          7         col "echo !%3!"
  28. )
  29. %sleep%
  30. )
  31. goto :eof
  32. :cout
  33. %~4
  34. for /l %%i in (%1,1,%2) do (
  35. call echo.!%3%%i!
  36. )
  37. goto :eof
复制代码





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