[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
  1. @echo off & setlocal enableDelayedExpansion
  2. set testStr=asdfghjk987654
  3. set testStr
  4. call :printReverse testStr & echo.
  5. call :printDev testStr 0 & (echo  )
  6. pause
  7. exit /b
  8. :printReverse
  9. setlocal
  10. if "!%1!" leq "" exit /b
  11. set tt=!%1!
  12. set /p=!tt:~-1!<nul
  13. set tt=!tt:~,-1!
  14. call :printReverse tt
  15. exit /b
  16. :printDev str pt
  17. setlocal
  18. if "!%1:~%2,1!" leq "" exit /b
  19. set /p=!%1:~%2,1!,<nul
  20. set /a tt=%2+1
  21. call :printDev %1 !tt!
  22. exit /b
复制代码

TOP

惭愧的说, 精妙 不敢当, 而且确实是没考虑特殊字符的, 有些代码写法上无必要(习惯或对有些语法理解不清晰), 或者冗余, 或者不严密.

seter 说的好, 蛋疼的精典表现. 我不是神牛, 只是想得到的就写点, 楼主并非不会, 就期待哪位真正好的代码吧

TOP

回复 6楼 的帖子

exit 带上 /b 参数 只是我的一个习惯, 并非任何地方都有必要, 确实如你所言, 第一处就是没必要的.
同样的 !var! 的用法也只是我的习惯, 也并非任何地方都必如此, 但我从未对不需 变量延迟 的情境作过深入学习研究, 也不想花脑筋考虑哪些地方用 %var% 形式就行了, 很少的时候, 我非常明确无需 变量延迟, 可能就会采用 %var% 的形式(不一定).

对于单独的 setlocal 语句, 我也是最近才尝试使用, 暂未深入学习, 之前在 exit /b 前加入了 对应的 endlocal, 正常. 接着又删除了 endlocal, 在本例中, 仍未出错, 我就索性没再加上了. 大家知道, 在高级语言的函数或过程里, 变量默认是局部化的, 退出函数或过程时, 局部变量也会自动被回收. 这里我只是猜测 exit /b 有没这种清理局部变量的功能.  按 FOR 的说法, 大概就是没有了, 以后再花时间来学这个.

对批处理的学习, 我只是用到时才学的, 勉强应付某问题也就罢了, 我的热情仅此而已.

如果你的热情到了相当的高度, 自然而然的会一头扎进去, 也自然的会 精妙娴熟, 所谓 "好之者不如乐之者", 而我只是小有所好.

TOP

回复 13楼 的帖子

我实测了一下, 发现 % 紧接(也就是说这两个符号之间没有任何别的东西)着 < 就不行, 但把 <nul 移到前面就可以, 如下:
  1. <nul set /p=%tt:~-1%
复制代码
至于原因, 我不知道, 楼主找找研究下吧

TOP

返回列表