Board logo

标题: [系统相关] [已解决]批处理中英文字符串长度不一样的问题请教! [打印本页]

作者: jorlaying    时间: 2022-12-21 11:44     标题: [已解决]批处理中英文字符串长度不一样的问题请教!

本帖最后由 jorlaying 于 2022-12-22 12:54 编辑
  1. @echo off
  2. set str=12345678
  3. set str2=一二三四五六七八
  4. echo %str%
  5. echo %str2%
  6. pause & exit /b
复制代码
str和str2同样都是8个字符,结果中文却长一半。
我想知道有没有办法判断字符是英文还是中文?
作者: czjt1234    时间: 2022-12-21 12:40

判断字符是英文还是中文,之后呢,想咋地?
作者: hfxiang    时间: 2022-12-21 13:08

如果只是要计算字串长度,以下大神的帖子就能解决问题(不区分中英文):
http://www.bathome.net/redirect. ... 4946&ptid=11799

如果想判断中英文,只用纯p实现起来将是极为困难
作者: jorlaying    时间: 2022-12-21 13:10

回复 2# czjt1234


   截取啊 比如如果是英文 我就截取8个  如果是中文 我就只截取4个
作者: jorlaying    时间: 2022-12-21 13:13

回复 3# hfxiang


    计算长度我看了,中文和英文长度一样。不是我想要的
作者: 77七    时间: 2022-12-21 13:47

本帖最后由 77七 于 2022-12-21 13:50 编辑

回复 4# jorlaying
  1. set str=12345678
复制代码

这个不是数字吗

不存在中英文混合情况的字符串吗?数字,标点符号等情况呢?
作者: czjt1234    时间: 2022-12-21 14:58

回复 4# jorlaying

abc中国d

这样。四个半的怎么算?
作者: czjt1234    时间: 2022-12-21 15:16

如果要么全是英文要么全是中文,可以用下面这个vbs
  1. s1 = "12345678"
  2. s2 = "一二三四五六七八"
  3. Set oFSO = CreateObject("Scripting.FileSystemObject")
  4. Set oWshShell = CreateObject("WScript.Shell")
  5. s = oWshShell.ExpandEnvironmentStrings("%windir%\System32\CScript.exe")
  6. If LCase(WScript.FullName) <> LCase(s) Then
  7.     s = s & " /nologo """ & WScript.ScriptFullName & """ "
  8.     For Each i In WScript.Arguments
  9.         If InStr(i, " ") > 0 Then i = """" & i & """"
  10.         s = s & i & " "
  11.     Next
  12.     oWshShell.Run "cmd.exe /k " & Left(s, Len(s) - 1)
  13.     WScript.Quit()
  14. End If
  15. Wsh.Echo t(s1)
  16. Wsh.Echo t(s2)
  17. Function t(ByVal s)
  18.     t = Left(s, 2)
  19.     If Asc(s) < 127 Then t = Left(s, 4)
  20. End Function
复制代码

作者: jorlaying    时间: 2022-12-22 12:53

回复 8# czjt1234


    解决了,用echo %str%|findstr "[a-zA-Z0-9]"    谢谢!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2