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

[文本处理] [已解决]求解释:批处理中的 call set 语句

[复制链接]
 楼主| 发表于 2013-5-21 18:01:28 | 显示全部楼层
set !var:~0,1!=%%i
这条语句的运行结果?意图是什么?
比如:var=12345,%%i=ABC,则运行后var=?
发表于 2013-5-21 19:21:37 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. Rem 开启变量延迟

  4. set str=aA bB cC dD eE fF gG hH iI jJ kK lL mM nN oO pP qQ rR sS tT uU vV wW xX yY zZ
  5. Rem 给变量str赋值

  6. for %%i in (%str%) do set "var=%%i" & set !var:~0,1!=%%i
  7. Rem 将aA赋值给变量a,bB赋值给变量b,cC赋值给变量c,。。。zZ赋值给变量z

  8. set "TS="
  9. Rem 初始化变量TS

  10. set /P TS=请输入测试字符:
  11. Rem 提示输入,假设输入字串为aBc

  12. for /l %%i in (0 1 100) do (
  13. Rem 从0到100循环101次

  14.         set "T3=!TS:~%%i,1!"
  15. Rem 循环第1次,变量T3赋值为a;循环第2次,T3赋值为B;循环第3次,T3赋值为c

  16.         if "!T3!"=="" goto :Res
  17. Rem 循环第4次时,T3的值为空,就跳转到标签Res

  18.         if defined !T3! (
  19. Rem 循环第1~3次时,T3的值不为空,条件为真,执行下面的语句

  20.                 call set T2=%%!T3!:~0,1%%
  21. Rem 循环第1次时,T3的值为a,而变量a的值为aA,取第1位a,变量T2被赋值为a;
  22. Rem 循环第2次时,T3的值为B,而变量B的值为bB,取第1位b,变量T2赋值为b;以此类推。

  23.                 if "!T3!"=="!T2!" call set T2=%%!T3!:~1,1%%
  24. Rem 循环第1次,T3的值a与T2的值a相等,那么截取aA的第2位A,变量T2被赋值为A;
  25. Rem 循环第2次,T3的值B与T2的值b不相等,那么T2不重新赋值,即T2的值是b;以此类推

  26.         ) else set "T2=!T3!"
  27. Rem 到循环第4次时,因为T3的值为空,所以将空值赋给T2,就是初始化变量T2

  28.         set Res=!Res!!T2!
  29. Rem 将每次循环得到的变量T2的值串接起来

  30. )
  31. :Res
  32. echo.&echo 转换前:!TS!
  33. echo 转换后:!Res!

  34. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2013-5-21 22:00:19 | 显示全部楼层
回复 17# apang


    谢谢提供的详细注释。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 06:22 , Processed in 0.025084 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表