标题: [其他] 批处理大小写字母转换 [打印本页]
作者: /zhqsystem/zhq 时间: 2015-10-16 02:26 标题: 批处理大小写字母转换
本帖最后由 pcl_test 于 2015-10-17 10:15 编辑
请将文件直接拖放至此批处理上自动执行转换,输出文件名为文本名_转换大(小)写.后缀名
注:特殊符号没有测试谨慎使用
-
- @echo off&color 0e
- setlocal enabledelayedexpansion
- set "letter_lss=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 "n_lss=0"
- set "n=0"
- for /f "delims=" %%i in ('type "%1"') do (
- set "str=%%i"
- for %%j in (%letter_lss%) do (
- set "str=!str:%%j=%%j!"
- set/a "n_lss+=1"
- if !n_lss! equ 26 (
- if !n! lss 1 (
- echo,首次进入清理同名数据重建_转换大写
- echo,!str!>%~n1_转换大写%~x1
- set/a n+=1
- ) else if !n! geq 1 (
- set/a n+=1
- echo,第 !n! 次执行导出操作
- echo=!str!>>%~n1_转换大写%~x1
- )
- set "n_lss=0"
- )
- )
- )
- set "letter_gtr=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 "n_gtr=0"
- set "n=0"
- for /f "delims=" %%i in ('type "%1"') do (
- set "str=%%i"
- for %%j in (%letter_gtr%) do (
- set "str=!str:%%j=%%j!"
- set/a "n_gtr+=1"
- if !n_gtr! equ 26 (
- if !n! lss 1 (
- echo=首次进入清理同名数据重建_转换小写
- echo=!str!>%~n1_转换小写%~x1
- set/a n+=1
- ) else if !n! geq 1 (
- set/a n+=1
- echo,第 !n! 次执行导出操作
- echo=!str!>>%~n1_转换小写%~x1
- )
- set "n_gtr=0"
- )
- )
- )
- pause
复制代码
作者: pcl_test 时间: 2015-10-16 10:36
发错版块了,应发“原创BAT代码”或“转载BAT代码”版块
作者: /zhqsystem/zhq 时间: 2015-10-16 13:06
回复 2# pcl_test
原创代码区不适合因为提取路径时带空格时有错误,毕竟没有实际全部测试,权限也不够。涉及到版权,不可能每个论坛都去找有没有发过
转载区更不适合,因为研究了一晚上,而实际链接地址和作者我去找谁,只能发到求助讨论板块
作者: pcl_test 时间: 2015-10-16 13:33
本帖最后由 pcl_test 于 2015-10-16 13:39 编辑
回复 3# /zhqsystem/zhq
转换方法不是原创,但你加入了自己意愿的一些交互进而加工,所以也可视为半原创;
但是我要问,你是要分享代码,还是希望别人帮你完善代码呢?从你的标题和描述,我现在是意会不出来了
作者: /zhqsystem/zhq 时间: 2015-10-16 21:16
回复 4# pcl_test
主要还是希望各位大神挑错误,进行完善毕竟在这里不只是要分享,也需要学习,可以进行共赢(共同学习),因为里边错误也有很多,只是不知道怎么完善了
像%1中的路径遇到空格目录居然就提示出错,还有文本中变量冲突时会替换代码中的执行变量,这些都是我解决不了的错误,希望大家帮忙完善,如果觉得没错误也可以留着备用
代码的优点就是利用26个英文字母进行循环替换,替换途中会每行替换26次(如果少于26个英文字母随自己的意愿改个数字和字母变量就完成了),取值最后一次的值完整取出来
作者: pcl_test 时间: 2015-10-17 17:59
本帖最后由 pcl_test 于 2015-10-17 20:45 编辑
回复 5# /zhqsystem/zhq
稍微修改下,转换方法没变,可处理字符串或是文件,加入了参数模式,提供了三种执行方式,然并卵……- @echo off
- call :字母大小写互转 "%~1" %~2 %~3
- pause&exit
- :字母大小写互转
- setlocal enabledelayedexpansion
- if "%~1" equ "" (
- echo;用法:
- echo; 1、call :字母大小写互转 "字符串或文件路径" [/U^|/L] [/F]
- echo; 2、支持外部调用 字母大小写互转.bat "字符串或文件路径" [/U^|/L] [/F]
- echo; 3、支持拖放文件到批处理图标上执行转换
- echo; /U 转为大写
- echo; /L 转为小写
- echo; /F 处理文件
- goto :eof
- ) else (
- if "%~2" equ "" (
- set /p c=请选择转化模式(U=转为大写,L=转为小写):
- if exist "%~1" (
- call :字母大小写互转 "%~1" /!c! /F
- ) else call :字母大小写互转 "%~1" /!c!
- goto :eof
- ) else (
- set "#2=%~2"
- set "#2=!#2:-=/!"
- if "%~3" equ "" (
- if /i "!#2!" equ "/U" (goto :U) else if /i "!#2!" equ "/L" (goto :L)
- ) else (
- set "#3=%~3"
- set "#3=!#3:-=/!"
- if /i "!#3!" equ "/F" (
- if /i "!#2!" equ "/U" (goto :U) else if /i "!#2!" equ "/L" (goto :L)
- ) else (
- if /i "!#3!" equ "/U" (
- if /i "!#2!" equ "/F" (goto :U)
- ) else if /i "!#3!" equ "/L" (
- if /i "!#2!" equ "/F" (goto :L)
- )
- )
- )
- echo;参数有误!&goto :eof
- )
- )
- :U
- set "var=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"
- goto :Convert
- :L
- set "var=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"
- :Convert
- set "str=%~1"
- if "%~3" equ "" (
- for %%a in (%var%) do set "str=!str:%%a=%%a!"
- echo;!str!
- ) else (
- (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%~1"') do (
- set "str=%%b"
- if not defined str (echo;) else (
- for %%a in (%var%) do set "str=!str:%%a=%%a!"
- echo;!str!
- )
- ))>"%~dp1new_%~nx1"
- )
- goto :eof
复制代码
作者: /zhqsystem/zhq 时间: 2015-10-17 22:29
回复 6# pcl_test
多谢指导,正在研究此段代码,学习中...
作者: bailong360 时间: 2015-10-18 22:34
- @echo off >nul 3>"%~dp1U_%~nx1"
- setlocal enabledelayedexpansion
- set list=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
- for /f "delims=" %%i in (%~s1) do (
- set "strU=%%i"
- set "strD=%%i"
- for %%i in (%list%) do (
- set let=%%i
- for /f "tokens=1,2" %%i in ("!let:~,1! !let:~-1!") do (
- set "strU=!strU:%%j=%%j!"
- set "strD=!strD:%%i=%%i!"
- )
- )
- echo;!strU!
- >>"%~dp1D_%~nx1" echo !strD!
- )
复制代码
忘记在哪里看到过一段大小写转换的代码,非常巧妙
实现起来大概就是这个样子,利用的是批处理在替换时不区分大小写的特性
作者: 依山居 时间: 2015-10-21 22:42
本帖最后由 依山居 于 2015-10-21 22:43 编辑
python 练手- f=open("a.txt","r")
- txt=f.read()
- uppertxt=txt.upper()
复制代码
作者: /zhqsystem/zhq 时间: 2015-10-21 23:09
回复 9# 依山居
这个怎么用,不是标准批处理语法一句没看懂,无语了
作者: 依山居 时间: 2015-10-21 23:19
回复 10# /zhqsystem/zhq
upper是python字符串对象的方法。
存为xx.py 用PYTHON IDLE 打开。
F5 运行。
uppertxt得到就是被转大写的内容。
作者: /zhqsystem/zhq 时间: 2015-10-21 23:54
回复 11# 依山居
不学了这个太难了,还是不会,而且是第一次知道有这么个程序(ini xml和inf至少还能看懂那么一点),这个超出太多了一下消化不了
作者: 依山居 时间: 2015-10-22 00:06
回复 12# /zhqsystem/zhq
不难。一样也是自学可以入门。
作者: CrLf 时间: 2015-10-22 00:40
回复 12# /zhqsystem/zhq
如果你平时关注的是解决问题而非语言本身,时间久了自然都会接触一点...
作者: 依山居 时间: 2015-10-22 02:36
这是自己写的python 。只是用调用了string自带的字母表。- import string
- lowercase=string.ascii_lowercase
- uppercase=string.ascii_uppercase
- f=open("a.txt","r")
- def l2u():
- txt=f.read()
- for r in range(0,26,1):
- txt=txt.replace(lowercase[r],uppercase[r])
- return(txt)
-
- def u2l():
- txt=f.read()
- for r in range(0,26,1):
- txt=txt.replace(uppercase[r],lowercase[r])
- return(txt)
复制代码
作者: CrLf 时间: 2015-10-22 03:04
试着写写 python- str='asdfsD1df'
-
- def l2u(str):
- ret=''
- for c in str:
- ret += chr(ord(c)&(0xff^0x20)) if c.isalpha() else c;
- return ret
-
- def u2l(str):
- ret=''
- for c in str:
- ret += chr(ord(c)|0x20) if c.isalpha() else c;
- return ret
-
- print (l2u(str))
- print (u2l(str))
复制代码
作者: 依山居 时间: 2015-10-22 11:51
回复 16# CrLf
解释一下,0xff^0x20
谢谢。
作者: 依山居 时间: 2015-10-22 12:54
回复 16# CrLf
其实是ret += chr(ord(c)&(0xff^0x20)) if c.isalpha() else c 整行语法我没看懂。
作者: pcl_test 时间: 2015-10-22 13:34
回复 18# 依山居
python一种类三元表达式
常规语法是这样
if (c.isalpha()): ret += chr(ord(c)&223)
else: ret += c
另几种方式
ret += c.isalpha() and chr(ord(c)&223) or c
ret += [c,chr(ord(c)&223)][c.isalpha()]
作者: CrLf 时间: 2015-10-22 13:49
呃,套用了 c 的算法:- 'a' == 0x60
- 'A' == 0x40
-
- 0xff^0x20 == 0b11111011
- 0x20 == 0b00000100
-
- 'a' & (0xff^0x20) = 'A'
- 'A' | 0x20 = 'a'
复制代码
作者: 依山居 时间: 2015-10-22 15:14
回复 20# CrLf
我想要在ret += chr(ord(c)|0x20) if c.isalpha() else c;
下面加一行print(ret),怎么加?
作者: CrLf 时间: 2015-10-22 20:36
回复 21# 依山居
啥意思,直接加上不就好了
作者: 依山居 时间: 2015-10-22 20:41
回复 22# CrLf
我加的时候报错了。
作者: 依山居 时间: 2015-10-22 20:42
好了。抱歉,可以是我之前没注意到我哪里弄错了。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |