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

批处理将字符串中的字母大小写互换

[复制链接]
发表于 2009-4-13 18:15:38 | 显示全部楼层

回复 30楼 的帖子

1、当用户输入的字符串中包含特殊字符时,后者可能出错。
2、是变量替换的意思,把空格替换成井号。
发表于 2009-4-17 01:45:49 | 显示全部楼层

我也来一个!

我这个是看到batman的程序,得到一点启示而进行修改的!希望楼主能够鉴定一下!
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "str=abHJ      dfsKHK    aB"
  4. echo 转换前的字符串是:%str%
  5. set/p=转换前的字符串是:<nul
  6. set "zm= abcdefghijklmnopqrstuvwxyzZYXWVUTSRQPONMLKJIHGFEDCBA"
  7. :a
  8. if not "!str:~%n%,1!"=="" (
  9.    for /l %%a in (1 1 26) do (
  10.     if "!str:~%n%,1!"=="!zm:~%%a,1!" (set/p=!zm:~-%%a,1!<nul&goto :b)
  11.     if "!str:~%n%,1!"=="!zm:~-%%a,1!" (set/p=!zm:~%%a,1!<nul&goto :b)
  12.    )
  13.    set/p=!str:~%n%,1!<nul
  14. :b
  15.   set/a n+=1&goto :a
  16. )
  17. pause>nul
复制代码

[ 本帖最后由 sjzong 于 2009-4-21 21:09 编辑 ]

评分

参与人数 1PB +8 收起 理由
随风 + 8 加分鼓励!

查看全部评分

发表于 2009-4-20 12:28:17 | 显示全部楼层
我也来个:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=abHJ      dfsKHK    aB"
  3. :lp
  4. for %%a in (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) do (
  5.      set "temp=%%a"
  6.      if "!str:~,1!" equ "!temp:~,1!" set /p=!temp:~1,1!<nul&goto next
  7.      if "!str:~,1!" equ "!temp:~1,1!" set /p=!temp:~,1!<nul&goto next
  8. )
  9. set /p=!str:~,1!<nul
  10. :next
  11. set "str=!str:~1!"&if defined str goto lp
  12. pause>nul
复制代码

[ 本帖最后由 batman 于 2009-4-20 13:28 编辑 ]

评分

参与人数 1PB +5 收起 理由
随风 + 5 好!

查看全部评分

发表于 2009-4-20 13:11:46 | 显示全部楼层

回复 33楼 的帖子

运行结果不对
发表于 2009-4-20 13:28:56 | 显示全部楼层
回楼上,是多写个c字符,已改正
 楼主| 发表于 2009-4-20 13:38:57 | 显示全部楼层
都忘了这个帖了,帖一下我的代码
  1. @echo off&Setlocal EnableDelayedExpansion
  2. set "Dxie=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  3. set "Xxie=abcdefghijklmnopqrstuvwxyz"
  4. set var=af SDF jfdi:LKJFIefIfifUfdf  AsZfzG sJ
  5. echo            转换前:%var%
  6. for /l %%a in (0 1 25) do (
  7.   set "D!Dxie:~%%a,1!=!Dxie:~%%a,1!"
  8.   set "X!Xxie:~%%a,1!=!Xxie:~%%a,1!"
  9. )
  10. :loop
  11. set "str=!var:~0,1!"
  12. if "%str%"=="!D%str%!" (set num=!num!!X%str%!) else (
  13.   if defined D!str! (set num=%num%!D%str%!) else set "num=%num%%str%"
  14. )
  15. set "var=%var:~1%"
  16. if defined var goto loop
  17. echo            转换后:%num%
  18. pause
复制代码
发表于 2009-4-20 14:03:36 | 显示全部楼层

回复 35楼 的帖子

改成这样?
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=abHJ      dfsKHK    aB"
  3. :lp
  4. (for %%a in (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) do (
  5.      set "temp=%%a"
  6.      if "!str:~,1!" equ "!temp:~,1!" set /p=!temp:~1,1!&goto next
  7.      if "!str:~,1!" equ "!temp:~1,1!" set /p=!temp:~,1!&goto next
  8. )
  9. set /p=!str:~,1!)<nul
  10. :next
  11. set "str=!str:~1!"&if defined str goto lp
  12. pause>nul
复制代码

评分

参与人数 1PB +5 收起 理由
随风 + 5 高!

查看全部评分

发表于 2009-4-21 16:06:53 | 显示全部楼层
其实25楼的代码也很不错^_^
发表于 2009-4-22 11:43:14 | 显示全部楼层
跟版主的思路差不多.


  1. @echo off&setlocal enabledelayedexpansion
  2. for %%i in (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) do (
  3. set str=%%i&set #!str:~0,1!=!str:~1,1!&set $!str:~1,1!=!str:~0,1!)
  4. set/p strr=请输入:
  5. echo 转换前:%strr%
  6. set "st="
  7. set n=0
  8. :begin
  9. set str=!strr:~%n%,1!
  10. if "!str!"=="!#%str%!" (set st=!st!!$%str%!) else if "!str!"=="!$%str%!" (set st=!st!!#%str%!) else set "st=!st!!str!"
  11. set/a n+=1
  12. if not "!str!"=="" (goto begin)
  13. echo 转换后:!st!
复制代码

[ 本帖最后由 inittab 于 2009-4-22 11:57 编辑 ]
发表于 2009-4-22 12:27:35 | 显示全部楼层
  1. @echo Off & setlocal EnableDelayedExpansion
  2. set "var=tEST" & set "str=!var!"

  3. set "Lower=a b c d e f g h i j k l m n o p q r s t u v w x y z"
  4. set "Upper=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
  5. For %%a in (%Lower%) do set "var=!var:%%a=%%a!"
  6. For /L %%a in (0 2 51) do (set "_!Lower:~%%a,1!=!Upper:~%%a,1!")

  7. :Loop
  8. If defined str (
  9.     set "AlphaL=%str:~,1%" & set "AlphaU=%var:~,1%" & set "Letter=!AlphaU!
  10.     If "!AlphaL!" equ "!AlphaU!" If defined _!AlphaL! (set "Letter=!_%str:~,1%!")
  11.     set "str=%str:~1%" & set "var=%var:~1%"
  12.     <nul set /p=!Letter!& goto :Loop
  13. )
  14. Echo\ & Pause>nul
复制代码
 楼主| 发表于 2009-4-22 14:34:40 | 显示全部楼层

回复 40楼 的帖子

此类代码始终摆脱不了逐字判断,效率问题,goto次数等于 字符串个数。
兄的代码不觉得for循环次数比36楼要多些吗?
32、33楼虽用goto跳出for,但其实for循环是不会跳出的,只是停止运行里面的命令罢了。也就是说for循环次数等于字符串个数乘26
发表于 2009-4-23 01:16:18 | 显示全部楼层

我也来个

  1. rem 思路:先定义两个集合:大写和小写,然后逐字符分析。
  2. rem 调换两个变量即可实现小大写互换

  3. @echo off
  4. setlocal enabledelayedexpansion

  5. set temp_a=ABCDEFGHIJKLMNOPQRSTUVWXYZ
  6. set temp_b=abcdefghijklmnopqrstuvwxyz

  7. set /p temp_c=请输入:
  8. echo 转换前:%temp_c%
  9. for /l %%a in (0 1 10000000) do (
  10. set temp_n=!temp_c:~%%a,1!
  11. for /l %%b in (0 1 26) do (
  12. set temp_m=!temp_a:~%%b,1!
  13. if !temp_n! == !temp_m! (
  14. if defined temp_n (
  15. set temp_s=!temp_b:~%%b,1!
  16. call :sub !temp_n! !temp_s!
  17. ) else (
  18. echo 转换后:!temp_c!
  19. pause>nul
  20. exit
  21. )
  22. )
  23. )
  24. )
复制代码
发表于 2009-4-23 01:25:49 | 显示全部楼层

回复 43楼 的帖子

水平有限,想不到更好的办法,呵呵
发表于 2009-5-20 14:42:15 | 显示全部楼层
看一看先……………………

评分

参与人数 1PB -2 收起 理由
wxcute -2 灌水。

查看全部评分

发表于 2009-11-14 16:56:44 | 显示全部楼层
首先设置变量提高点效率:
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in (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) do (
  3.     set "code=%%a"&set "#!code:~,1!=!code:~1,1!"&set "_!code:~1,1!=!code:~,1!"
  4. )
  5. set /p str=请输入字符:&echo.&set /p=经转换后:<nul
  6. :lp
  7. if defined _%str:~,1% (
  8.    if "%str:~,1%" equ "!#%str:~,1%!" (
  9.       set /p=!_%str:~,1%!<nul
  10.       ) else (
  11.       set /p=!#%str:~,1%!<nul
  12.    )
  13.    ) else (
  14.    set /p=%str:~,1%<nul
  15. )
  16. set "str=%str:~1%"
  17. if defined str goto lp
  18. pause>nul
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-16 22:05 , Processed in 0.019463 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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