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

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

[复制链接]
发表于 2008-12-7 20:21:39 | 显示全部楼层 |阅读模式
将字符串中的字母大写换成小写,小写换成大写。
如:

  1. set var=abHJ      dfsKHK    aB
复制代码

  1. 要求显示
  2. 转换前:abHJ      dfsKHK    aB
  3. 转换后:ABhj      DFSkhk   Ab
复制代码
发表于 2008-12-7 21:32:01 | 显示全部楼层

指点下

@echo off
set var=abHJ      dfsKHK    aB
set/p b=AB%var:~2,18%AB
pause
 楼主| 发表于 2008-12-7 21:37:06 | 显示全部楼层
汗,字符窜是随机的,没有规律。
发表于 2008-12-7 22:49:30 | 显示全部楼层
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. set /p var=请输入:
  4. set Lowercase=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. set Capital=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
  6. cls & echo 转换前: %var%

  7. for %%a in (%var%) do call :replace %%a
  8. echo 转换后: %var%
  9. pause & exit /b

  10. :replace
  11. set "n="
  12. set "word2="
  13. set word=%1
  14. :loop
  15. set /a n+=1
  16. set one=!word:~-%n%,1!
  17. if %one% leq Z if %one% geq a (
  18.   if "!Lowercase:%one%=%one%!" equ "%Lowercase%" (
  19.     call :C %one% & goto next
  20.   ) else (call :L %one% & goto next)
  21. )
  22. set "word2=%one%%word2%"
  23. :next
  24. if "!word:~%n%!" neq "" goto loop
  25. set var=!var:%word2%=%word2%!
  26. goto :eof

  27. :L
  28. for %%a in (%Lowercase%) do if /i %1==%%a set "word2=%%a%word2%" & goto :eof

  29. :C
  30. for %%a in (%Capital%) do if /i %1==%%a set "word2=%%a%word2%" & goto :eof
复制代码
有点乱。。

[ 本帖最后由 tireless 于 2008-12-8 01:50 编辑 ]

评分

参与人数 1PB +2 收起 理由
随风 + 2 代码有待简化,效率需提高。

查看全部评分

发表于 2008-12-7 22:56:31 | 显示全部楼层
  1. @echo off
  2. set /p var=Please input:
  3. for /f "delims=" %%a in ('^(echo e0:200 "%var%" ff^&more /e +5^<"%~f0"^)^|debug^|findstr "^[^-0]"^|findstr /v "Program Invalid"') do echo.%%a
  4. pause&exit/b

  5. a100
  6. mov ax,0
  7. mov ds,ax
  8. mov bx,200
  9. mov dl,[bx]
  10. cmp dl,41
  11. jb 112
  12. xor dl,20
  13. mov ah,2
  14. int 21
  15. inc bx
  16. mov al,[bx]
  17. cmp al,ff
  18. jnz 108
  19. int 20

  20. g
  21. q
  22. q
复制代码

评分

参与人数 2PB +11 技术 +1 收起 理由
老刘1号 + 1 卧槽,DEBUG汇编,学习了
随风 + 11 牛!

查看全部评分

发表于 2008-12-7 23:44:00 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p "string=请输入字符串:"
  3. set "code=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 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 string=!string: =#!
  5. :loop
  6. set "str_nul=!str_nul!!string:~,1! "&set string=!string:~1!
  7. if defined string goto loop
  8. for %%i in (!str_nul!) do (
  9.     set flag=1
  10.     for %%j in (!code!) do (
  11.         if /i "%%i"=="%%j" if not "%%i"=="%%j" set str=!str!%%j&set flag=0
  12.     )
  13.     if !flag! equ 1 set str=!str!%%i
  14. )
  15. set "str=!str:#= !"
  16. echo.&echo 转换后:!str!
  17. pause>nul
复制代码
以上代码对于数字和空格原样输出,之前写过类似代码,见http://www.bathome.net/thread-2550-1-2.html中第二个功能。

[ 本帖最后由 lhjoanna 于 2008-12-8 01:56 编辑 ]

评分

参与人数 1PB +2 收起 理由
随风 + 2 用其他字符替代空格,不够通用。

查看全部评分

发表于 2008-12-8 00:13:51 | 显示全部楼层

回复 6楼 的帖子

遇到非字母会有问题:
请输入字符串:bbs.bathome.net
'P' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

转换后BBs.bathome.net
发表于 2008-12-8 01:18:13 | 显示全部楼层
指定的字符串中会有特殊字符吗?
发表于 2008-12-8 01:56:26 | 显示全部楼层
  1. 'P' 不是内部或外部命令,也不是可运行的程序
  2. 或批处理文件。
复制代码
这个不是非字母的问题啊,刚检查了下,是因为在给code赋值时 P 到了第二行了,应该是粘贴时不小心多按了回车,现已改过来了。对于特殊字符,不支持 !  ^ 。#符号我当成空格的标记了,如果需要显示可以修改下代码。
发表于 2008-12-8 13:17:39 | 显示全部楼层
利用一个特性:变量名不区分大小写,变量值却区分大小写。

  1. @echo off&setlocal enabledelayedexpansion
  2. 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
  3. for %%i in (%str%) do set "var=%%i" & set !var:~0,1!=%%i
  4. set "TS="
  5. set /P TS=请输入测试字符(没考虑特殊字符):
  6. for /l %%i in (0 1 100) do (
  7.         set "T3=!TS:~%%i,1!"
  8.         if "!T3!"=="" goto :Res
  9.         if defined !T3! (
  10.                 call set T2=%%!T3!:~0,1%%
  11.                 if "!T3!"=="!T2!" call set T2=%%!T3!:~1,1%%) else set "T2= "
  12.         set Res=!Res!!T2!
  13. )
  14. :Res
  15. echo.&echo 转换前:!TS!
  16. echo 转换后:!Res!
  17. pause>nul

复制代码

评分

参与人数 2PB +13 收起 理由
随风 + 5 美中不足未考虑其他字符
rat + 8 好!不过应当是... else set &amp;quot;T2=!T3!&amp;quot;

查看全部评分

 楼主| 发表于 2008-12-8 15:15:43 | 显示全部楼层

回复 10楼 的帖子

set var=abc  ## adf
这种情况下把#号替换成了空格。
发表于 2008-12-8 17:38:24 | 显示全部楼层
原帖由 rat 于 2008-12-7 22:56 发表
@echo off
set /p var=Please input:
for /f "delims=" %%a in ('^(echo e0:200 "%var%" ff^&more /e +5^

汇编吗?很眼熟的说。
发表于 2008-12-8 17:48:38 | 显示全部楼层
原帖由 随风 于 2008-12-8 15:15 发表
set var=abc  ## adf
这种情况下把#号替换成了空格。

呵呵,只处理 字母 和空格,当初设计的时候
没考虑完全啊
发表于 2008-12-8 19:46:56 | 显示全部楼层
原帖由 firewolf85 于 2008-12-8 17:38 发表

汇编吗?很眼熟的说。


是。就会一点点而已:(
发表于 2009-1-15 19:24:43 | 显示全部楼层
@ECHO OFF&setlocal enabledelayedexpansion
:222
set st=
set /p "strr=请输入字符串:"
echo 转换前!strr!
call :111 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
echo 转换后:!st!
pause>nul&goto :222
:111
for /l %%a in (0,1,100) do (
&#160; set "stt=!strr:~%%a,1!"
&#160; if not defined stt goto :eof
&#160; set /a aaa=0
&#160;   for %%i in (%*) do (
&#160;   set /a aaa+=1
&#160;   if /i "!stt!"=="%%i" (
&#160;        if not "!stt!"=="%%i" set "st=!st!%%i"&set /a aaa=0
&#160;        if "!stt!"=="%%i" (
&#160;            set "bb=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"
&#160;            for %%k in (!bb!) do if /i "!stt!"=="%%k" set "st=!st!%%k"&set /a aaa=0
&#160;                  )
&#160;              )
&#160;   if !aaa!==26 set "st=!st!!stt!"&#160;
&#160;       )                   &#160;
)

[ 本帖最后由 skuny 于 2009-1-15 19:34 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-16 23:15 , Processed in 0.026120 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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