标题: [文本处理] [已解决]批处理如何将简单字符串中的汉字和字母分开 [打印本页]
作者: hlzj88 时间: 2017-1-19 16:48 标题: [已解决]批处理如何将简单字符串中的汉字和字母分开
本帖最后由 hlzj88 于 2017-1-20 22:33 编辑
本提问也可称为从变量里删除延迟变量
假设 我得到文件夹名称 格式 汉字zimu- setlocal enabledelayedexpansion
- for /d %%i in (*) do (
- set hz=%%i
- for /f %%j 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 hz=!hz:%%j=!
- set zm=?????(删除%%i中已有的汉字不会)
- )
复制代码
至此,我能得到汉字,但怎么从%%i中得到字母串,代码多次调整,无法得到字母串
也许有其他更好的方法,我主要是想看到以上代码如何写能完成删除延迟变量的
作者: pcl_test 时间: 2017-1-19 20:26
本帖最后由 pcl_test 于 2017-5-28 16:54 编辑
逐字判断- @echo off&setlocal enabledelayedexpansion
- 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=1
- set "str=汉字zimu"
- for /l %%a in (0 1 6) do (
- rem if not defined为提取汉字
- for /f %%b in ("!str:~%%a,1!") do if defined #%%b echo;%%b
- )
- pause
复制代码
作者: hlzj88 时间: 2017-1-19 20:40
回复 2# pcl_test
请教,未交待的条件,字符串长度不限。如我的代码例,已经可以得到汉字串,能否通过bat直接从字符串里去掉已得的汉字串,而留下字母串。
作者: Nsqs 时间: 2017-1-19 20:55
本帖最后由 Nsqs 于 2017-1-19 21:46 编辑
方法1- @echo off&setlocal enabledelayedexpansion
- set "s=abcdefghijkmlnopqrstuvwxyz"
- for /l %%1 in (0 1 26)do call set #%%s:~%%1,1%%=#
- set /p str=输入汉字或字母:
- for /f "tokens=1 delims=:" %%1 in ('^(echo %str%^&echo.^)^|findstr /o "^.*$"')do set /a len=%%1-4
- for /l %%1 in (0 1 %len%)do (
- for /f %%2 in ("!str:~%%1,1!") do (
- if not defined #%%2 (call set s1=%%s1%%%%2)else call set s2=%%s2%%%%2
- )
- )
- echo 汉字部分:%s1%
- echo 字母部分:%s2%
- pause
复制代码
方法2- ' 2>nul &@echo off&cls&set /p str=输入汉字或字母: & call echo %%str%%|cscript -nologo -e:"vbs" "%~0"&pause&exit
- set regexp=new regexp
- set ws=wsh.stdin
- with regexp
- read=ws.readline
- .global=-1:.ignorecase=-1
- .pattern="[^\u4e00-\u9fff0]*"
- wsh.echo "汉字部分:" & .replace(read,empty)
- .pattern="[^a-z]*"
- wsh.echo "字母部分:" & .replace(read,empty)
- end with
复制代码
作者: hlzj88 时间: 2017-1-19 21:11
回复 4# Nsqs
方法1 测试 汉字里会出现字母 比如 我我你你他他wwnntt
作者: Nsqs 时间: 2017-1-19 21:33
回复 5# hlzj88
稍作修改
作者: 523066680 时间: 2017-1-19 21:46
\p{han}, in perl
作者: pcl_test 时间: 2017-1-19 22:00
回复 3# hlzj88
论坛搜索 字符串长度,学学怎么计算/获取长度
将得到汉字从原字符串中逐一去除掉,剩下的就是字母,跟你去除字母得到汉字一样
作者: Batcher 时间: 2017-1-19 23:09
回复 3# hlzj88
不能直接
作者: zz100001 时间: 2017-1-20 14:31
批处理是一个很现实的东西
看你代码的意思只是想要把 [当前目录] 中 所有[文件夹] 的名字 [去掉汉字]
可以直接粗暴的弄嘛- echo off
- setlocal enabledelayedexpansion
- chcp 437>nul
- dir /b /ad>%~s0:0s~%
- chcp 936>nul
- for /f "delims=" %%a in (%~s0:0s~%) do (
- set wjm=%%a
- set zm=!wjm:?=!
- echo !zm!
- )
- pause
复制代码
作者: hlzj88 时间: 2017-1-20 22:31
谢谢楼上的各位,523066680版主的代码于我来说如天书。
作者: xyh9999 时间: 2021-11-25 15:16
本帖最后由 xyh9999 于 2021-11-25 15:20 编辑
- @echo off & setlocal enabledelayedexpansion
- 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=1
- set str=汉字ziMu
- for /l %%a in (0 1 5) do (
- set b=!str:~%%a,1!
- ::not defined为提取汉字,defined为提取英文
- if not defined #!b! set s=!s!!b!
- )
- echo !s!
- pause
复制代码
作者: xyh9999 时间: 2021-11-25 15:19
本帖最后由 xyh9999 于 2021-11-25 15:21 编辑
回复 4# Nsqs
修改成如下好象也行:- @echo off & setlocal enabledelayedexpansion
- set s=abcdefghijkmlnopqrstuvwxyz
- for /l %%1 in (0 1 26)do call set #%%s:~%%1,1%%=0
- ::set /p str=输入汉字或字母:
- set str=汉字ziMu123abc
- echo.字符串是: !str!
- for /f "tokens=1 delims=:" %%1 in ('^(echo !str!^& echo.^)^|findstr /o .')do (set /a len=%%1-4)
- echo.字符串长度是: %len%+1
- for /l %%1 in (0 1 %len%)do (
- for /f %%2 in ("!str:~%%1,1!") do (
- if not defined #%%2 (set s1=!s1!%%2)else (set s2=!s2!%%2)
- )
- )
- echo 非字母部分:!s1!
- echo 字母部分:!s2!
- pause
复制代码
作者: xyh9999 时间: 2021-11-25 15:24
也可如下:- @echo off & setlocal enabledelayedexpansion
- set hz=汉字ziMu
- set hz1=!hz!
- set hz2=!hz!
- for %%j 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 hz1=!hz1:%%j=!)
- echo 非字母是:!hz1!
- for %%j in (!hz1!) do (set hz2=!hz2:%%j=!)
- echo 字母是:!hz2!
- pause
复制代码
作者: qixiaobin0715 时间: 2021-11-25 15:35
这样呢:
hanzi汉字ziMu字母
结果:
hanziziMu
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |