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

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

将字符串中的字母大写换成小写,小写换成大写。
如:
  1. set var=abHJ      dfsKHK    aB
复制代码
  1. 要求显示
  2. 转换前:abHJ      dfsKHK    aB
  3. 转换后:ABhj      DFSkhk   Ab
复制代码
技术问题请到论坛发帖求助!

指点下

@echo off
set var=abHJ      dfsKHK    aB
set/p b=AB%var:~2,18%AB
pause

TOP

汗,字符窜是随机的,没有规律。
技术问题请到论坛发帖求助!

TOP

  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 编辑 ]
1

评分人数

    • 随风: 代码有待简化,效率需提高。PB + 2

TOP

  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
复制代码
2

评分人数

TOP

  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 编辑 ]
1

评分人数

    • 随风: 用其他字符替代空格,不够通用。PB + 2

TOP

回复 6楼 的帖子

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

转换后BBs.bathome.net

TOP

指定的字符串中会有特殊字符吗?
心绪平和,眼藏静谧。

TOP

  1. 'P' 不是内部或外部命令,也不是可运行的程序
  2. 或批处理文件。
复制代码
这个不是非字母的问题啊,刚检查了下,是因为在给code赋值时 P 到了第二行了,应该是粘贴时不小心多按了回车,现已改过来了。对于特殊字符,不支持 !  ^ 。#符号我当成空格的标记了,如果需要显示可以修改下代码。

TOP

利用一个特性:变量名不区分大小写,变量值却区分大小写。
  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
复制代码
2

评分人数

    • 随风: 美中不足未考虑其他字符PB + 5
    • rat: 好!不过应当是... else set &quot;T2=!T3!&quot;PB + 8

TOP

回复 10楼 的帖子

set var=abc  ## adf
这种情况下把#号替换成了空格。
技术问题请到论坛发帖求助!

TOP

原帖由 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^

汇编吗?很眼熟的说。

TOP

原帖由 随风 于 2008-12-8 15:15 发表
set var=abc  ## adf
这种情况下把#号替换成了空格。

呵呵,只处理 字母 和空格,当初设计的时候
没考虑完全啊

TOP

原帖由 firewolf85 于 2008-12-8 17:38 发表

汇编吗?很眼熟的说。


是。就会一点点而已:(

TOP

@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 (
  set "stt=!strr:~%%a,1!"
  if not defined stt goto :eof
  set /a aaa=0
    for %%i in (%*) do (
    set /a aaa+=1
    if /i "!stt!"=="%%i" (
         if not "!stt!"=="%%i" set "st=!st!%%i"&set /a aaa=0
         if "!stt!"=="%%i" (
             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"
             for %%k in (!bb!) do if /i "!stt!"=="%%k" set "st=!st!%%k"&set /a aaa=0
                   )
               )
    if !aaa!==26 set "st=!st!!stt!" 
        )                    
)

[ 本帖最后由 skuny 于 2009-1-15 19:34 编辑 ]

TOP

返回列表