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

[文本处理] [已解决]批处理如何将简单字符串中的汉字和字母分开

[复制链接]
发表于 2017-1-19 16:48:29 | 显示全部楼层 |阅读模式
本帖最后由 hlzj88 于 2017-1-20 22:33 编辑

本提问也可称为从变量里删除延迟变量
假设 我得到文件夹名称  格式 汉字zimu
  1. setlocal enabledelayedexpansion
  2. for /d %%i in (*) do (
  3. set hz=%%i
  4.     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=!
  5.    set zm=?????(删除%%i中已有的汉字不会)
  6. )
复制代码
至此,我能得到汉字,但怎么从%%i中得到字母串,代码多次调整,无法得到字母串

也许有其他更好的方法,我主要是想看到以上代码如何写能完成删除延迟变量的
发表于 2017-1-19 20:26:36 | 显示全部楼层
本帖最后由 pcl_test 于 2017-5-28 16:54 编辑

逐字判断
  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 #%%a=1
  3. set "str=汉字zimu"
  4. for /l %%a in (0 1 6) do (
  5.     rem if not defined为提取汉字
  6.     for /f %%b in ("!str:~%%a,1!") do if defined #%%b echo;%%b
  7. )
  8. pause
复制代码
 楼主| 发表于 2017-1-19 20:40:22 | 显示全部楼层
回复 2# pcl_test
请教,未交待的条件,字符串长度不限。如我的代码例,已经可以得到汉字串,能否通过bat直接从字符串里去掉已得的汉字串,而留下字母串。
发表于 2017-1-19 20:55:41 | 显示全部楼层
本帖最后由 Nsqs 于 2017-1-19 21:46 编辑

方法1
  1. @echo off&setlocal enabledelayedexpansion
  2. set "s=abcdefghijkmlnopqrstuvwxyz"
  3. for /l %%1 in (0 1 26)do call set #%%s:~%%1,1%%=#
  4. set /p str=输入汉字或字母:
  5. for /f "tokens=1 delims=:" %%1 in ('^(echo %str%^&echo.^)^|findstr /o "^.*$"')do set /a len=%%1-4
  6. for /l %%1 in (0 1 %len%)do (
  7.         for /f %%2 in ("!str:~%%1,1!") do (
  8.                 if not defined #%%2 (call set s1=%%s1%%%%2)else call set s2=%%s2%%%%2
  9.         )
  10. )
  11. echo 汉字部分:%s1%
  12. echo 字母部分:%s2%
  13. pause
复制代码
方法2
  1. ' 2>nul &@echo off&cls&set /p str=输入汉字或字母: & call echo %%str%%|cscript -nologo -e:"vbs" "%~0"&pause&exit
  2. set regexp=new regexp
  3. set ws=wsh.stdin
  4. with regexp
  5.         read=ws.readline
  6.         .global=-1:.ignorecase=-1
  7.         .pattern="[^\u4e00-\u9fff0]*"
  8.         wsh.echo "汉字部分:" & .replace(read,empty)
  9.         .pattern="[^a-z]*"
  10.         wsh.echo "字母部分:" & .replace(read,empty)
  11. end with
复制代码

评分

参与人数 1技术 +1 收起 理由
hlzj88 + 1 技术强,乐于助人

查看全部评分

 楼主| 发表于 2017-1-19 21:11:33 | 显示全部楼层
回复 4# Nsqs
方法1 测试 汉字里会出现字母  比如 我我你你他他wwnntt
发表于 2017-1-19 21:33:49 | 显示全部楼层
回复 5# hlzj88


    稍作修改
发表于 2017-1-19 21:46:03 | 显示全部楼层
\p{han}, in perl
发表于 2017-1-19 22:00:04 | 显示全部楼层
回复 3# hlzj88

论坛搜索 字符串长度,学学怎么计算/获取长度
将得到汉字从原字符串中逐一去除掉,剩下的就是字母,跟你去除字母得到汉字一样
发表于 2017-1-19 23:09:01 | 显示全部楼层
回复 3# hlzj88


能否通过bat直接从字符串里去掉已得的汉字串

不能直接
发表于 2017-1-20 14:31:38 | 显示全部楼层
批处理是一个很现实的东西
看你代码的意思只是想要把 [当前目录] 中 所有[文件夹] 的名字 [去掉汉字]
可以直接粗暴的弄嘛
  1. echo off
  2. setlocal enabledelayedexpansion
  3. chcp 437>nul
  4. dir /b /ad>%~s0:0s~%
  5. chcp 936>nul
  6. for /f "delims=" %%a in (%~s0:0s~%) do (
  7.   set wjm=%%a
  8.   set zm=!wjm:?=!
  9.   echo !zm!
  10. )
  11. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
hlzj88 + 1 技术强,乐于助人,

查看全部评分

 楼主| 发表于 2017-1-20 22:31:26 | 显示全部楼层
谢谢楼上的各位,523066680版主的代码于我来说如天书。
发表于 2021-11-25 15:16:19 | 显示全部楼层
本帖最后由 xyh9999 于 2021-11-25 15:20 编辑
  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 #%%a=1
  3. set str=汉字ziMu
  4. for /l %%a in (0 1 5) do (
  5. set b=!str:~%%a,1!
  6. ::not defined为提取汉字,defined为提取英文
  7. if not defined #!b! set s=!s!!b!
  8. )
  9. echo !s!
  10. pause
复制代码
发表于 2021-11-25 15:19:32 | 显示全部楼层
本帖最后由 xyh9999 于 2021-11-25 15:21 编辑

回复 4# Nsqs

修改成如下好象也行:
  1. @echo off & setlocal enabledelayedexpansion
  2. set s=abcdefghijkmlnopqrstuvwxyz
  3. for /l %%1 in (0 1 26)do call set #%%s:~%%1,1%%=0
  4. ::set /p str=输入汉字或字母:
  5. set str=汉字ziMu123abc
  6. echo.字符串是: !str!
  7. for /f "tokens=1 delims=:" %%1 in ('^(echo !str!^& echo.^)^|findstr /o .')do (set /a len=%%1-4)
  8. echo.字符串长度是: %len%+1
  9. for /l %%1 in (0 1 %len%)do (
  10.     for /f %%2 in ("!str:~%%1,1!") do (
  11.         if not defined #%%2 (set s1=!s1!%%2)else (set s2=!s2!%%2)
  12.     )
  13. )
  14. echo 非字母部分:!s1!
  15. echo 字母部分:!s2!
  16. pause
复制代码
发表于 2021-11-25 15:24:20 | 显示全部楼层
也可如下:
  1. @echo off & setlocal enabledelayedexpansion
  2. set hz=汉字ziMu
  3. set hz1=!hz!
  4. set hz2=!hz!
  5. 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=!)
  6. echo 非字母是:!hz1!
  7. for %%j in (!hz1!) do (set hz2=!hz2:%%j=!)
  8. echo 字母是:!hz2!
  9. pause
复制代码
发表于 2021-11-25 15:35:08 | 显示全部楼层
这样呢:
hanzi汉字ziMu字母
结果:
hanziziMu
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 19:11 , Processed in 0.036285 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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