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

回复 25楼 zqz0012005 的帖子

嗯,没必要将大小写字母定义在两个变量中。
  1. @echo off
  2. set "letters= abcdefghijklmnopqrstuvwxyzZYXWVUTSRQPONMLKJIHGFEDCBA"
  3. for /l %%a in (1,1,26) do call set /a "_%%letters:~%%a,1%%=%%a"
  4. :input
  5. setlocal EnableDelayedExpansion
  6. echo 请输入:&set /p var=&if not defined var endlocal&goto:input
  7. :loop
  8. set char=!var:~%pi%,1!
  9. set /a sn=_!char! 2>nul||set sn=0
  10. if defined char (
  11.     if %sn% gtr 0 (
  12.         if "!char!"=="!letters:~%sn%,1!" (set str=!str!!letters:~-%sn%,1!) else (set str=!str!!letters:~%sn%,1!)
  13.     ) else (
  14.         set str=!str!!char!
  15.     )
  16.     set /a pi+=1
  17.     goto loop
  18. )
  19. echo=!str!
  20. pause&endlocal&goto input
复制代码
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

支持各种特殊情况
包括:
  1. ^ < > " ; ^ & * = :~ |
复制代码
等符号
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in (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) do set @D%%a=%%a
  3. for %%a in (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) do set @x%%a=%%a
  4. set /p in=输入一个大小写都的有字符串:
  5. set n=0
  6. set out=
  7. for /l %%a in (0) do (
  8. for %%n in (!n!) do (
  9.   for /f "delims=" %%b in ("!in:~%%n,1!") do (
  10.    if defined @d%%b (
  11.     if %%b equ !@D%%b! (set out=!out!!@x%%b!) else (set out=!out!!@D%%b!)
  12.    ) else (
  13.     set out=!out!^^%%b
  14.    )
  15.   set /a n+=1
  16.   )
  17.   if "!in:~%%n,1!" equ ";" set out=!out!;&set/a n+=1
  18.   if %%n equ !n! echo;大小写互换为:!out!&PAUSE&exit
  19. )
  20. )
复制代码

[ 本帖最后由 netbenton 于 2009-11-14 19:32 编辑 ]

TOP

不要忘了 for /f 的 eol 隐患,呵呵。

for /l 无限循环由于运行机制,其实不太实用。必须用 exit 强制退出整个bat,exit /b 或 goto 都不行。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

re zqz0012005
48楼又经修改,增加了以下特殊符号的处理:
^ ; !

效率可是很高的了
确实是只有exit强行退出,还没想到其它办法来做到一个预处理全部完成的,只好用它了。

TOP

試一試...
@echo off&setlocal enabledelayedexpansion&set nub=0
set "s=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"
set "b=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 %%i in (!s!) do set/a num+=1&set %%i1=%%i
for %%i in (!b!) do set/a num2+=1&set %%i2=%%i
set /p "str=string= *"
:lp
call set str=%%str:~!nub!%%
for %%i in (!b!) do if "!str:~0,1!"=="%%i" call set "OK=!OK!%%!str:~0,1!1%%"&goto ut
for %%i in (!s!) do if "!str:~0,1!"=="%%i" call set "OK=!OK!%%!str:~0,1!2%%"&goto :out
if not "!str!"=="" (set "ok=!ok!!str:~0,1!") else (goto :end)
:out
set nub=1
goto :lp
:end
echo string= *!OK!
pause>nul
带内地用语或带里语的文章,在下读写总觉有点吃力;
如误解了各位意思的讲勿见怪   ^_^

TOP

本帖最后由 zm900612 于 2011-7-15 11:26 编辑

用 choice 的思路,不通用、不高效、不简洁、不考虑字符的兼容性:
  1. aAcebFaJad
  2. cls
  3. @echo off&setlocal enabledelayedexpansion
  4. set str=#ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890
  5. set /p 字符串=<%0
  6. set 字
  7. call :strlen 字符串
  8. (for /l %%a in (1 1 !len!) do (
  9. choice /cs /c abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 /n>nul
  10. for %%b in (!errorlevel!) do set 结 果 =!结 果 !!str:~%%b,1!
  11. ))<%0
  12. set 结
  13. pause
  14. :strlen
  15. setlocal enabledelayedexpansion
  16. set "$=!%1!#"
  17. set len=&for %%a in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1)do if !$:~%%a^,1!. NEQ . set/a len+=%%a&set $=!$:~%%a!
  18. endlocal&If %2. neq . (set/a%2=%len%)else set len=%len%
复制代码

TOP

vbs:
  1. Dim inpStr, Arr, Str
  2. inpStr = InputBox("请输入要转换的字符串")
  3. Arr = split("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. For Each Str In Arr
  5.   inpStr = Replace(inpStr, Str,"@#$&")
  6.   inpStr = Replace(inpStr, UCase(Str), Str)
  7.   inpStr = Replace(inpStr, "@#$&", UCase(str))
  8. Next
  9. MsgBox inpStr
复制代码
***共同提高***

TOP

本帖最后由 zm900612 于 2011-7-15 12:47 编辑

另一种逐字替换,兼容各种可见的特殊字符,调用 ascmap 后可以支持汉字:
  1. @echo off
  2. set "字符串=WwW.baThOME.net"
  3. set 字
  4. setlocal enabledelayedexpansion
  5. set<nul>tmp /p=@!字符串!
  6. (for %%a in (tmp) do (
  7. for /l %%b in (1 2 %%~za) do echo;
  8. ))>k
  9. set str=@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@!"#$%%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~
  10. for /f "skip=2 tokens=1,3" %%a in ('fc /b k tmp') do if "%%a" lss "1" set 结 果 =!结 果 !!str:~0x%%b,1!
  11. set 结
  12. del tmp k
  13. pause
复制代码

TOP

本帖最后由 mxxcgzxxx 于 2011-7-15 16:03 编辑

没事来个好玩的
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set str=aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
  4. :1
  5. set/p p=
  6. echo %p%|findstr "--[a-Z]--">nul&&echo 大哥没事写神马多减号嘛!重写! && ghoto :1
  7. set a=26
  8. :2
  9. set /a a-=1
  10. set b=!str:~%a%,1!
  11. set "p=!p:%b%=--%b%--!"
  12. set /a a-=1
  13. set c=!str:~%a%,1!
  14. set "p=!p:%c%=%b%!"
  15. set "p=!p:--%b%--=%c%!"
  16. if %a%==0 goto :3
  17. goto :2
  18. :3
  19. echo %p%
  20. pause
复制代码
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "nn=qQ wW eE rR tT yY uU iI oO pP aA sS dD fF gG hH jJ kK lL zZ xX cC vV bB nN mM"
  4. set "a=123a,B"
  5.                                                                                     
  6. :a
  7. set aa=!a:~0,1!
  8. set aaa=!a:~1!
  9. for %%a in (!nn!) do (
  10. set n=%%a
  11. set n1=!n:~0,1!
  12. set n2=!n:~1,1!
  13. if "!aa!"=="!n1!" (
  14. set /p=!n2!<nul) else (
  15. if "!aa!"=="!n2!" (
  16. set /p=!n1!<nul) else (set /p=!aa!<nul)
  17. )
  18. set a=!aaa!
  19. pause>nul
  20. if "a"=="" goto :end
  21. goto :a
  22. )
  23. :end
  24. pause
复制代码
为什么出问题了!!!!

TOP

本帖最后由 lpy19870706 于 2011-11-27 22:53 编辑

不通用的
  1. @echo off
  2. set var=abHJ      dfsKHK  aB
  3. echo 替换前 %var%
  4. set a=%var:abHJ      dfsKHK  aB=AVhj      DFSkhk  Ab%
  5. echo 替换后 %a%
  6. pause>nul
复制代码

TOP

  1. @echo off& setlocal enabledelayedexpansion
  2. set __var1=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
  3. set __var2=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 /p var=input strings:
  5. call :setvar __var1
  6. call :setvar __var2
  7. set n=0
  8. :chg
  9. if not "!var:~%n%,1!" equ "" (
  10. if "!var:~%n%,1!" equ " " (set _vartmp=!_vartmp! ) else (
  11. set #tmp=!var:~%n%,1!
  12. for /f "tokens=2 delims==" %%i in ('set _!#tmp!') do (
  13. if not "!var:~%n%,1!" equ "%%i" set __vartmp=!__vartmp!%%i
  14. )
  15. )
  16. set /a n+=1
  17. goto chg
  18. )
  19. echo !__vartmp!
  20. pause
  21. goto :eof
  22. :setvar
  23. for %%i in (!%1!) do set _%%i%1=%%i
  24. goto :eof
复制代码

TOP

一翻旧帖才发现自己以前已经发过了奇葩代码,那就贴两个常规思路的吧,估计会撞车:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=TestABC"
  3. set "str2=!str:~1!"
  4. set "大写=!str!"&set "小写=!str!"
  5. for %%a in (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) do set "大写=!大写:%%a=%%a!"
  6. for %%a in (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) do set "小写=!小写:%%a=%%a!"
  7. for /l %%a in (0 1 100) do (
  8. if "!str:~%%a,1!"=="!小写:~%%a,1!" (
  9. set "str=!str:~,%%a!!大写:~%%a,1!!str2:~%%a!"
  10. ) else (
  11. if "!str:~%%a,1!"=="!大写:~%%a,1!" set "str=!str:~,%%a!!小写:~%%a,1!!str2:~%%a!"
  12. )
  13. )
  14. echo !str!
  15. pause
复制代码
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=TestABC"
  3. set "str=@!str!"
  4. for %%a in (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)do set %%a=%%a
  5. for /l %%a in (1 1 8189)do (
  6. if "!str:~%%a,1!"=="" (
  7. for /f "delims=" %%b in (^""!结果!"^")do echo %%~b&pause
  8. )
  9. set 结果=!结果!!str:~%%a,1!
  10. if !str:~%%a^,1! leq Z if !str:~%%a^,1! geq a (
  11. for /f %%b in ("!str:~%%a,1!:") do (
  12. if %%b neq %%~db (set chr=%%~db)else set chr=!%%b~0!
  13. )
  14. set 结果=!结果:~,-1!!chr:~,1!
  15. )
  16. )
复制代码

TOP

本代码处理的字符串不得有空格和特殊符号,也就是只能是大小写字母。
  1. @echo off&setlocal enabledelayedexpansion
  2. set str=qdjSSM
  3. for /l %%i in (0 1 100) do (
  4.    if "!str:~%%i,1!" neq "" (
  5.       set "s=!s!!str:~%%i,1!  "
  6.    )
  7. )
  8. set "ll=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"
  9. set "ss=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"
  10. for %%a in (%s%) do (
  11.    for %%b in (%ll%) do (
  12.       if /i %%a equ %%b (
  13.         if %%a neq %%b (
  14.            set res=!res!%%b
  15.         )
  16.       )
  17.    )
  18.    for %%b in (%ss%) do (
  19.       if /i %%a equ %%b (
  20.         if %%a neq %%b (
  21.            set res=!res!%%b
  22.         )
  23.       )
  24.    )
  25. )
  26. echo %res%
  27. pause
复制代码
1

评分人数

    • CrLf: 开始学了,必须鼓励鼓励~技术 + 1
时光荏苒||新陈代谢&&涛声依旧||本性难移

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%i in ('type 示例文件.txt') do (
  4.    set "str=%%i"
  5.    for %%s in (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) do set "str=!str:%%s=%%s!"
  6.    REM for %%s in (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) do set "str=!str:%%s=%%s!"
  7.    echo.!str!
  8. ))>示例文件_new.txt
复制代码

TOP

返回列表