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

[文本处理] [讨论]批处理不用转义就输出特殊字符的发现

今天尝试了几种方法发现可以不用转义就输出特殊字符,而且很简单,想与大家讨论下!

我们平时都要进行转义才可输出一些特殊的字符,但我今天发现当使用带!号的函数输出不用转义,如果使用%号就会出错!
原先有没有相关的贴子讨论到这个问题?
程序如下,可以尝试各种情况
  1. @echo off
  2. setlocal enableDelayedExpansion
  3. :1
  4. set /p p=
  5. set a=%p%
  6. set b=!p!
  7. set "c=%p%"
  8. set "d=!p!"
  9. echo.
  10. echo p=!p!
  11. echo a=!a!
  12. echo b=!b!
  13. echo c=!c!
  14. echo d=!d!
  15. pause
  16. echo p=%p%
  17. echo a=%a%
  18. echo b=%b%
  19. echo c=%c%
  20. echo d=%d%
  21. pause
  22. goto :1
复制代码
我想在定义函数时,是没有区分特殊字符的,函数本身也没有出错,只是显示时出现了特殊代码与程序本身进行了冲突。
而使用!号后进行了延时,特殊代码就不起做用了!
世界上没有学不会的知识,也没有想得到却做不到的事!

当然的了,这是预处理机制的顺序决定的,因为运行bat时是先扩展%str%,再解释语句,再扩展!str!,所以用!str!显示出来的内容不会在解释语句的时候被误解

TOP

不同的情况要不同对待:
例如,对 for 内的延迟变量a的第一个字符,比较是否大于1,则 if !a:~0^,1! gtr 1 (echo 大于) else echo;小于或等于
例如,在 goto 循环内,则尽量直接使用转义符而不开变量延迟,以提高效率
还有各种情况。。。
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

谢谢前辈指点
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

返回列表