[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
适合所有字符:
归功于变量延迟的强大功能!
  1. @echo off
  2. set "pass=&^^%%<|!{=*"
  3. setlocal enabledelayedexpansion
  4. set pass=!pass!"
  5. set pass
  6. :rep
  7. set /p str=Enter password:
  8. set/a n+=1
  9. if %n% geq 3 goto :error
  10. if not "!str!"=="!pass!" goto :rep
  11. echo 密码正确
  12. set pass
  13. :: ...
  14. pause
  15. goto :eof
  16. :error
  17. echo 超过三次错误
  18. pause
复制代码

[ 本帖最后由 netbenton 于 2009-5-9 18:58 编辑 ]

TOP

re 9楼

^和%  减半问题,只要是在BAT程序中明码出现就会是这样的,编程之人定义时自行处理好就可以了,
对于!会丢掉的问题,只要在setlocal enabledelayedexpansion之前已经定义的变量是不会丢的,

因为,只要是变量内的数据,在用!var!方法来引用变量时是不会丢掉任何东西的。
不管是变量显示还是变量传递,如:
假设变量的值为:  !和>"  [叹号,大于号,一个双引号]
echo !var!
set str=!var!
if "!var!"=="abc" goto :end
都是把变量值当数据处理,也就是所有字符原意义全部失效。

[ 本帖最后由 netbenton 于 2009-5-9 19:18 编辑 ]

TOP

re 楼上

如果开启了变量延迟,转义也不行

TOP

返回列表